├── .gitignore ├── README.md ├── docker ├── Dockerfile └── install-llvm-toolchain.sh ├── icons ├── github-classroom.png └── youtube.png └── slides ├── lecture0.pdf ├── lecture1.pdf ├── lecture10.pdf ├── lecture11.pdf ├── lecture12.pdf ├── lecture13.pdf ├── lecture14.pdf ├── lecture2.pdf ├── lecture3.pdf ├── lecture4.pdf ├── lecture5.pdf ├── lecture6.pdf ├── lecture7.pdf ├── lecture8.pdf ├── lecture9.pdf └── project.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IS593: Language-based Security 2 | 3 | ## Notice for Fall 2023 4 | This course is designed for an alternative to [CS524](https://github.com/prosyslab-classroom/cs524-program-analysis) for the Graduate School of 5 | Information Security of KAIST. The course contents will be largely the same as CS524. Thus, if you plan to take CS524, I recommend you take IS593 in Fall 2023. 6 | 7 | ## Course Webpage 8 | We will use the [CS524](https://github.com/prosyslab-classroom/cs524-program-analysis) webpage for this semester. 9 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | RUN apt-get update && \ 4 | apt-get upgrade -y && \ 5 | apt-get install -y software-properties-common && \ 6 | add-apt-repository -y ppa:avsm/ppa && \ 7 | apt-get install -y make git gcc ocaml opam pkg-config m4 cmake sudo 8 | 9 | ENV OCAML_VERSION=4.08.0 10 | ENV IS593_OPAM_SWITCH=is593-$OCAML_VERSION 11 | ENV OPAMYES=1 12 | ENV HOME=/home/student 13 | 14 | RUN useradd -ms /bin/bash student 15 | 16 | ENV SCRIPT=$HOME/script 17 | RUN mkdir -p $SCRIPT 18 | COPY install-llvm-toolchain.sh $SCRIPT 19 | RUN $SCRIPT/install-llvm-toolchain.sh 20 | 21 | RUN opam init --compiler=$OCAML_VERSION --disable-sandboxing && \ 22 | opam switch create $IS593_OPAM_SWITCH $OCAML_VERSION && \ 23 | eval $(opam env) && \ 24 | opam install dune llvm.9.0.0 ounit 25 | 26 | RUN sudo adduser student sudo 27 | RUN echo "root:1234" | chpasswd 28 | RUN echo "student:1234" | chpasswd 29 | USER student 30 | RUN echo "$(opam env)" >> ~/.bashrc 31 | WORKDIR $HOME 32 | -------------------------------------------------------------------------------- /docker/install-llvm-toolchain.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # Remove all existing alternatives 4 | update-alternatives --remove-all llvm 5 | update-alternatives --remove-all clang 6 | 7 | # exit on first error 8 | set -e 9 | 10 | VERSION=9 11 | 12 | # install 13 | apt install -y libllvm-$VERSION-ocaml-dev libllvm8 llvm-$VERSION llvm-$VERSION-dev llvm-$VERSION-doc llvm-$VERSION-examples llvm-$VERSION-runtime 14 | apt install -y clang-$VERSION clang-tools-$VERSION clang-$VERSION-doc libclang-common-$VERSION-dev libclang-$VERSION-dev libclang1-$VERSION clang-format-$VERSION python-clang-$VERSION 15 | apt install -y libfuzzer-$VERSION-dev 16 | apt install -y lldb-$VERSION 17 | apt install -y lld-$VERSION 18 | apt install -y libc++-$VERSION-dev libc++abi-$VERSION-dev 19 | 20 | # llvm 21 | update-alternatives \ 22 | --install /usr/lib/llvm llvm /usr/lib/llvm-$VERSION 20 \ 23 | --slave /usr/bin/llvm-ar llvm-ar /usr/bin/llvm-ar-$VERSION \ 24 | --slave /usr/bin/llvm-as llvm-as /usr/bin/llvm-as-$VERSION \ 25 | --slave /usr/bin/llvm-bcanalyzer llvm-bcanalyzer /usr/bin/llvm-bcanalyzer-$VERSION \ 26 | --slave /usr/bin/llvm-cat llvm-cat /usr/bin/llvm-cat-$VERSION \ 27 | --slave /usr/bin/llvm-cfi-verify llvm-cfi-verify /usr/bin/llvm-cfi-verify-$VERSION \ 28 | --slave /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-$VERSION \ 29 | --slave /usr/bin/llvm-cov llvm-cov /usr/bin/llvm-cov-$VERSION \ 30 | --slave /usr/bin/llvm-c-test llvm-c-test /usr/bin/llvm-c-test-$VERSION \ 31 | --slave /usr/bin/llvm-cvtres llvm-cvtres /usr/bin/llvm-cvtres-$VERSION \ 32 | --slave /usr/bin/llvm-cxxdump llvm-cxxdump /usr/bin/llvm-cxxdump-$VERSION \ 33 | --slave /usr/bin/llvm-cxxfilt llvm-cxxfilt /usr/bin/llvm-cxxfilt-$VERSION \ 34 | --slave /usr/bin/llvm-cxxmap llvm-cxxmap /usr/bin/llvm-cxxmap-$VERSION \ 35 | --slave /usr/bin/llvm-diff llvm-diff /usr/bin/llvm-diff-$VERSION \ 36 | --slave /usr/bin/llvm-dis llvm-dis /usr/bin/llvm-dis-$VERSION \ 37 | --slave /usr/bin/llvm-dlltool llvm-dlltool /usr/bin/llvm-dlltool-$VERSION \ 38 | --slave /usr/bin/llvm-dwarfdump llvm-dwarfdump /usr/bin/llvm-dwarfdump-$VERSION \ 39 | --slave /usr/bin/llvm-dwp llvm-dwp /usr/bin/llvm-dwp-$VERSION \ 40 | --slave /usr/bin/llvm-elfabi llvm-elfabi /usr/bin/llvm-elfabi-$VERSION \ 41 | --slave /usr/bin/llvm-exegesis llvm-exegesis /usr/bin/llvm-exegesis-$VERSION \ 42 | --slave /usr/bin/llvm-extract llvm-extract /usr/bin/llvm-extract-$VERSION \ 43 | --slave /usr/bin/llvm-lib llvm-lib /usr/bin/llvm-lib-$VERSION \ 44 | --slave /usr/bin/llvm-link llvm-link /usr/bin/llvm-link-$VERSION \ 45 | --slave /usr/bin/llvm-lto2 llvm-lto2 /usr/bin/llvm-lto2-$VERSION \ 46 | --slave /usr/bin/llvm-lto llvm-lto /usr/bin/llvm-lto-$VERSION \ 47 | --slave /usr/bin/llvm-mc llvm-mc /usr/bin/llvm-mc-$VERSION \ 48 | --slave /usr/bin/llvm-mca llvm-mca /usr/bin/llvm-mca-$VERSION \ 49 | --slave /usr/bin/llvm-modextract llvm-modextract /usr/bin/llvm-modextract-$VERSION \ 50 | --slave /usr/bin/llvm-mt llvm-mt /usr/bin/llvm-mt-$VERSION \ 51 | --slave /usr/bin/llvm-nm llvm-nm /usr/bin/llvm-nm-$VERSION \ 52 | --slave /usr/bin/llvm-objcopy llvm-objcopy /usr/bin/llvm-objcopy-$VERSION \ 53 | --slave /usr/bin/llvm-objdump llvm-objdump /usr/bin/llvm-objdump-$VERSION \ 54 | --slave /usr/bin/llvm-opt-report llvm-opt-report /usr/bin/llvm-opt-report-$VERSION \ 55 | --slave /usr/bin/llvm-pdbutil llvm-pdbutil /usr/bin/llvm-pdbutil-$VERSION \ 56 | --slave /usr/bin/llvm-PerfectShuffle llvm-PerfectShuffle /usr/bin/llvm-PerfectShuffle-$VERSION \ 57 | --slave /usr/bin/llvm-profdata llvm-profdata /usr/bin/llvm-profdata-$VERSION \ 58 | --slave /usr/bin/llvm-ranlib llvm-ranlib /usr/bin/llvm-ranlib-$VERSION \ 59 | --slave /usr/bin/llvm-rc llvm-rc /usr/bin/llvm-rc-$VERSION \ 60 | --slave /usr/bin/llvm-readelf llvm-readelf /usr/bin/llvm-readelf-$VERSION \ 61 | --slave /usr/bin/llvm-readobj llvm-readobj /usr/bin/llvm-readobj-$VERSION \ 62 | --slave /usr/bin/llvm-rtdyld llvm-rtdyld /usr/bin/llvm-rtdyld-$VERSION \ 63 | --slave /usr/bin/llvm-size llvm-size /usr/bin/llvm-size-$VERSION \ 64 | --slave /usr/bin/llvm-split llvm-split /usr/bin/llvm-split-$VERSION \ 65 | --slave /usr/bin/llvm-stress llvm-stress /usr/bin/llvm-stress-$VERSION \ 66 | --slave /usr/bin/llvm-strings llvm-strings /usr/bin/llvm-strings-$VERSION \ 67 | --slave /usr/bin/llvm-strip llvm-strip /usr/bin/llvm-strip-$VERSION \ 68 | --slave /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-$VERSION \ 69 | --slave /usr/bin/llvm-tblgen llvm-tblgen /usr/bin/llvm-tblgen-$VERSION \ 70 | --slave /usr/bin/llvm-undname llvm-undname /usr/bin/llvm-undname-$VERSION \ 71 | --slave /usr/bin/llvm-xray llvm-xray /usr/bin/llvm-xray-$VERSION 72 | 73 | # clang 74 | update-alternatives \ 75 | --install /usr/bin/clang clang /usr/bin/clang-$VERSION 10 \ 76 | --slave /usr/bin/clang++ clang++ /usr/bin/clang++-$VERSION \ 77 | --slave /usr/bin/clang-apply-replacements clang-apply-replacements /usr/bin/clang-apply-replacements-$VERSION \ 78 | --slave /usr/bin/clang-change-namespace clang-change-namespace /usr/bin/clang-change-namespace-$VERSION \ 79 | --slave /usr/bin/clang-check clang-check /usr/bin/clang-check-$VERSION \ 80 | --slave /usr/bin/clang-cl clang-cl /usr/bin/clang-cl-$VERSION \ 81 | --slave /usr/bin/clang-cpp clang-cpp /usr/bin/clang-cpp-$VERSION \ 82 | --slave /usr/bin/clangd clangd /usr/bin/clangd-$VERSION \ 83 | --slave /usr/bin/clang-extdef-mapping clang-extdef-mapping /usr/bin/clang-extdef-mapping-$VERSION \ 84 | --slave /usr/bin/clang-format clang-format /usr/bin/clang-format-$VERSION \ 85 | --slave /usr/bin/clang-format-diff clang-format-diff /usr/bin/clang-format-diff-$VERSION \ 86 | --slave /usr/bin/clang-import-test clang-import-test /usr/bin/clang-import-test-$VERSION \ 87 | --slave /usr/bin/clang-include-fixer clang-include-fixer /usr/bin/clang-include-fixer-$VERSION \ 88 | --slave /usr/bin/clang-offload-bundler clang-offload-bundler /usr/bin/clang-offload-bundler-$VERSION \ 89 | --slave /usr/bin/clang-query clang-query /usr/bin/clang-query-$VERSION \ 90 | --slave /usr/bin/clang-refactor clang-refactor /usr/bin/clang-refactor-$VERSION \ 91 | --slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-$VERSION \ 92 | --slave /usr/bin/clang-reorder-fields clang-reorder-fields /usr/bin/clang-reorder-fields-$VERSION \ 93 | --slave /usr/bin/scan-view scan-view /usr/bin/scan-view-$VERSION \ 94 | --slave /usr/bin/scan-build scan-build /usr/bin/scan-build-$VERSION \ 95 | --slave /usr/bin/scan-build-py scan-build-py /usr/bin/scan-build-py-$VERSION \ 96 | --slave /usr/bin/bugpoint bugpoint /usr/bin/bugpoint-$VERSION \ 97 | --slave /usr/bin/c-index-test c-index-test /usr/bin/c-index-test-$VERSION \ 98 | --slave /usr/bin/diagtool diagtool /usr/bin/diagtool-$VERSION \ 99 | --slave /usr/bin/find-all-symbols find-all-symbols /usr/bin/find-all-symbols-$VERSION \ 100 | --slave /usr/bin/git-clang-format git-clang-format /usr/bin/git-clang-format-$VERSION \ 101 | --slave /usr/bin/hmaptool hmaptool /usr/bin/hmaptool-$VERSION \ 102 | --slave /usr/bin/modularize modularize /usr/bin/modularize-$VERSION \ 103 | --slave /usr/bin/obj2yaml obj2yaml /usr/bin/obj2yaml-$VERSION \ 104 | --slave /usr/bin/opt opt /usr/bin/opt-$VERSION \ 105 | --slave /usr/bin/sancov sancov /usr/bin/sancov-$VERSION \ 106 | --slave /usr/bin/sanstats sanstats /usr/bin/sanstats-$VERSION \ 107 | --slave /usr/bin/verify-uselistorder verify-uselistorder /usr/bin/verify-uselistorder-$VERSION \ 108 | --slave /usr/bin/wasm-ld wasm-ld /usr/bin/wasm-ld-$VERSION \ 109 | --slave /usr/bin/yaml2obj yaml2obj /usr/bin/yaml2obj-$VERSION \ 110 | --slave /usr/bin/yaml-bench yaml-bench /usr/bin/yaml-bench-$VERSION \ 111 | --slave /usr/bin/lld lld /usr/bin/lld-$VERSION \ 112 | --slave /usr/bin/lld-link lld-link /usr/bin/lld-link-$VERSION \ 113 | --slave /usr/bin/lli-child-target lli-child-target /usr/bin/lli-child-target-$VERSION \ 114 | --slave /usr/bin/lli lli /usr/bin/lli-$VERSION \ 115 | --slave /usr/bin/lldb lldb /usr/bin/lldb-$VERSION \ 116 | --slave /usr/bin/lldb-argdumper lldb-argdumper /usr/bin/lldb-argdumper-$VERSION \ 117 | --slave /usr/bin/lldb-mi lldb-mi /usr/bin/lldb-mi-$VERSION \ 118 | --slave /usr/bin/lldb-server lldb-server /usr/bin/lldb-server-$VERSION \ 119 | --slave /usr/bin/lldb-test lldb-test /usr/bin/lldb-test-$VERSION \ 120 | --slave /usr/bin/lldb-vscode lldb-vscode /usr/bin/lldb-vscode-$VERSION 121 | 122 | # make system default 123 | update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100 124 | update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 100 125 | -------------------------------------------------------------------------------- /icons/github-classroom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/icons/github-classroom.png -------------------------------------------------------------------------------- /icons/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/icons/youtube.png -------------------------------------------------------------------------------- /slides/lecture0.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture0.pdf -------------------------------------------------------------------------------- /slides/lecture1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture1.pdf -------------------------------------------------------------------------------- /slides/lecture10.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture10.pdf -------------------------------------------------------------------------------- /slides/lecture11.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture11.pdf -------------------------------------------------------------------------------- /slides/lecture12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture12.pdf -------------------------------------------------------------------------------- /slides/lecture13.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture13.pdf -------------------------------------------------------------------------------- /slides/lecture14.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture14.pdf -------------------------------------------------------------------------------- /slides/lecture2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture2.pdf -------------------------------------------------------------------------------- /slides/lecture3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture3.pdf -------------------------------------------------------------------------------- /slides/lecture4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture4.pdf -------------------------------------------------------------------------------- /slides/lecture5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture5.pdf -------------------------------------------------------------------------------- /slides/lecture6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture6.pdf -------------------------------------------------------------------------------- /slides/lecture7.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture7.pdf -------------------------------------------------------------------------------- /slides/lecture8.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture8.pdf -------------------------------------------------------------------------------- /slides/lecture9.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/lecture9.pdf -------------------------------------------------------------------------------- /slides/project.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prosyslab-classroom/is593-language-based-security/e76aac65c62f88e7cafec40c5cf3966c8057471e/slides/project.pdf --------------------------------------------------------------------------------