중급자를 위해 준비한
[보안] 강의입니다.
이런 걸
배워요!
리눅스 커널 해킹
CTF 커널 문제 풀이
linux kernel exploit
💡 강의 특징
이 강의는 리눅스 커널 해킹에 대한 전반적인 지식을 학습하는 강의입니다.
리눅스 커널 해킹은 국내에서 공부할 수 있는 자료가 매우 부족한 분야이며, 환경 구성 단계부터 수많은 애로 사항이 있는 분야입니다. 하지만, 이 강의를 수강하시면 환경 구성은 물론이고 다양한 보호 기법의 우회 방법과 각종 취약점에 대해 쉽게 공부하실 수 있습니다.
또, 단순히 특정 툴 사용법만을 가르치거나 이미 잘 알려진 해킹 기술들을 다시 소개하는 수준에 불과한 여타 정보보안 강의들과 달리, low-level에서의 동작 원리에 입각하여 각종 익스플로잇 테크닉들을 소개한다는 것이 이 강의의 특징입니다.
▲ 리눅스 커널의 취약점을 이용해 권한 상승을 일으킨 모습
최근 몇 년간 major 한 CTF에서는 리눅스 커널 문제가 꾸준히 출제됐습니다. 최근의 경우 출제 빈도가 더욱 증가하는 추세고요. 이 강의를 "완벽히" 이해하신다면, CTF에서 출제되는 리눅스 커널 문제들은 대부분 해결하실 수 있을 것이며, 리얼 월드에서 취약점을 찾는 데도 큰 도움을 받으실 수 있을 거라 말씀드리고 싶습니다.
마지막으로 이 강의의 가장 큰 특징은, 강의마다 강사가 직접 제작한 실습 예제 파일을 제공해 준다는 점입니다. 이러한 실습 예제 파일을 통해 수강생 여러분들이 직접 강의를 따라 해 보고, 디버깅을 해보실 수 있습니다.
📖 각 섹션에서는 무엇을 배우나요?
▲ 섹션 4.6. userfaultfd 활용 기법 강의 자료
이 강의는 대부분 위의 예시와 같이 키노트를 이용한 발표로 구성되어 있습니다.
- 섹션 0. 강의 프롤로그
본격적으로 강의를 시작하기에 앞서, 강사에 대한 간단한 소개와 강의 계획을 설명해 드리는 섹션입니다.
- 섹션 1. 리눅스 커널 해킹 배경지식
리눅스 커널을 해킹하기 위한 기본적인 배경지식을 공부하는 섹션입니다.
- 섹션 2. 리눅스 커널 분석 환경 세팅
리눅스 커널을 디버깅할 수 있는 환경을 구성하는 방법을 알아보는 섹션입니다. 리얼 월드를 위한 환경 세팅 과정에서는 리눅스 커널과 파일 시스템을 직접 빌드해볼 것이며, CTF를 위한 환경 세팅 과정에서는 문제를 풀기 위한 준비 과정을 알아볼 예정입니다.
- 섹션 3. 리눅스 커널의 보호 기법 및 우회 방안
리눅스 커널의 다양한 보호 기법에 대해 알아보고, 각 보호 기법들을 우회할 수 있는 테크닉들을 실습을 통해 공부해보는 섹션입니다. 공부해볼 보호 기법들은 인텔 계열 아키텍쳐의 보호 기법들이며, 총 6가지의 보호 기법을 공부해 볼 예정입니다. 또, 이번 섹션부터는 각 강의마다 실습 예제 파일이 제공됩니다.
- 섹션 4. 다양한 커널 공격 테크닉 실습
리눅스 커널 취약점이 터지는 상황에서 권한 상승을 일으킬 수 있는 다양한 테크닉들을 공부해보는 섹션입니다.
- 섹션 5. 다양한 리눅스 커널 취약점 분석
리눅스 커널에서 발생할 수 있는 다양한 유형의 취약점을 알아보는 섹션입니다.
- 섹션 6. 대회 문제 실습 - Input Test Driver
실제로 CTF에 출제된 리눅스 커널 문제를 풀어보는 섹션입니다. 풀어볼 문제는, 강사가 소속된 팀에서 운영했던 대회인 2020 Defenit CTF에서 출제된 Input Test Driver 문제입니다.
- 섹션 7. 강의 에필로그
리눅스 커널을 공부할 때 도움이 되는 레퍼런스를 소개한 뒤, 강의를 마무리하는 섹션입니다.
✏️ 강의를 듣기 위한 배경지식
- 최소 배경지식
1. C 언어
- 권장 배경지식
1. 시스템 해킹 관련 지식 (BOF, ROP, UAF 등)
2. 어셈블리 언어 (x86_64)
🙋🏻♂️ 예상 질문 Q&A
Q. 저는 시스템 해킹을 해본 적도 없고 어셈블리 언어도 모르는데 강의를 들어도 될까요?
A. 각 강의를 제작할 때, 시스템 해킹이 주 분야가 아니신 분들도 들을 수 있도록 제작했기 때문에, 새로운 용어가 등장할 때마다 강의에 그에 대한 설명이 들어가 있습니다.
하지만, 이는 요약된 설명이기 때문에 모르는 개념이 등장했을 때 구글 검색과 병행해서 공부하셔야 하며, 시스템 해킹 관련 지식이 없는 상태에서 수강하실 경우 학습 기간이 훨씬 길어진다는 점을 염두에 두셔야 합니다.
Q. 리눅스는 어떤 버전을 사용하시나요?
A. 제 경우 우분투 18.04 버전을 사용했습니다.(https://releases.ubuntu.com/18.04/)
Q. 강의가 연재식 강의던데, 남은 강의는 언제 올라오나요?
A. 현재 모든 강의의 업로드가 완료되었습니다.
이런 분들께
추천드려요!
학습 대상은
누구일까요?
리눅스 커널 해킹을 처음 공부해보고 싶은 분들
포너블을 공부해 보았고, 이제 리눅스 커널 익스플로잇에 입문하고 싶으신 분들
선수 지식,
필요할까요?
C언어
안녕하세요
김현우입니다.
리눅스 커널 해커 및 컨트리뷰터로 활동 중인 김현우입니다. V4bel이라는 닉네임을 사용하고 있습니다.
⦁ github : github.com/V4bel
⦁ e-mail : imv4bel@gmail.com
취약점 제보
⦁ CVE-2024-27394 (Linux Kernel TCP Use-After-Free)
⦁ CVE-2024-27395 (Linux Kernel openvswitch Use-After-Free)
⦁ CVE-2024-27396 (Linux Kernel GTP Use-After-Free)
⦁ CVE-2023-51779 (Linux Kernel bluetooth socket Use-After-Free)
⦁ CVE-2023-51780 (Linux Kernel atm socket Use-After-Free)
⦁ CVE-2023-51781 (Linux Kernel appletalk socket Use-After-Free)
⦁ CVE-2023-51782 (Linux Kernel rose socket Use-After-Free)
⦁ CVE-2023-32269 (Linux Kernel NET/ROM socket Use-After-Free)
⦁ CVE-2022-41218 (Linux Kernel DVB core Use-After-Free)
⦁ CVE-2022-45884 (Linux Kernel DVB core Use-After-Free)
⦁ CVE-2022-45885 (Linux Kernel DVB core Use-After-Free)
⦁ CVE-2022-45886 (Linux Kernel DVB core Use-After-Free)
⦁ CVE-2022-45919 (Linux Kernel DVB core Use-After-Free)
⦁ CVE-2022-40307 (Linux Kernel Device driver Use-After-Free)
⦁ CVE-2022-41848 (Linux Kernel Device driver Use-After-Free)
⦁ CVE-2022-41849 (Linux Kernel Device driver Use-After-Free)
⦁ CVE-2022-41850 (Linux Kernel Device driver Use-After-Free)
⦁ CVE-2022-44032 (Linux Kernel Device driver Use-After-Free)
⦁ CVE-2022-44033 (Linux Kernel Device driver Use-After-Free)
⦁ CVE-2022-44034 (Linux Kernel Device driver Use-After-Free)
⦁ CVE-2022-45888 (Linux Kernel Device driver Use-After-Free)
리눅스 커널 기여
⦁ tcp: Fix Use-After-Free in tcp_ao_connect_init
(github.com/torvalds/linux/commit/80e679b352c3ce5158f3f778cfb77eb767e586fb)
⦁ net: openvswitch: Fix Use-After-Free in ovs_ct_exit
(github.com/torvalds/linux/commit/5ea7b72d4fac2fdbc0425cd8f2ea33abe95235b2)
⦁ net: gtp: Fix Use-After-Free in gtp_dellink
(github.com/torvalds/linux/commit/f2a904107ee2b647bb7794a1a82b67740d7c8a64)
⦁ Bluetooth: af_bluetooth: Fix Use-After-Free in bt_sock_recvmsg
(github.com/torvalds/linux/commit/2e07e8348ea454615e268222ae3fc240421be768)
⦁ atm: Fix Use-After-Free in do_vcc_ioctl
(github.com/torvalds/linux/commit/24e90b9e34f9e039f56b5f25f6e6eb92cdd8f4b3)
⦁ appletalk: Fix Use-After-Free in atalk_ioctl
(github.com/torvalds/linux/commit/189ff16722ee36ced4d2a2469d4ab65a8fee4198)
⦁ net/rose: Fix Use-After-Free in rose_ioctl
(github.com/torvalds/linux/commit/810c38a369a0a0ce625b5c12169abce1dd9ccd53)
⦁ media: dvb-core: Fix use-after-free due to race at dvb_register_device()
(github.com/torvalds/linux/commit/627bb528b086b4136315c25d6a447a98ea9448d3)
⦁ af_key: Fix heap information leak
(github.com/torvalds/linux/commit/2f4796518315ab246638db8feebfcb494212e7ee)
⦁ netrom: Fix use-after-free caused by accept on already connected socket
(github.com/torvalds/linux/commit/611792920925fb088ddccbe2783c7f92fdfb6b64)
⦁ net/rose: Fix to not accept on connected socket
(github.com/torvalds/linux/commit/14caefcf9837a2be765a566005ad82cd0d2a429f)
⦁ net/x25: Fix to not accept on connected socket
(github.com/torvalds/linux/commit/f2b0b5210f67c56a3bcdf92ff665fb285d6e0067)
⦁ efi: capsule-loader: Fix use-after-free in efi_capsule_write
(github.com/torvalds/linux/commit/9cb636b5f6a8cc6d1b50809ec8f8d33ae0c84c95)
⦁ HID: roccat: Fix Use-After-Free in roccat_read
(github.com/torvalds/linux/commit/cacdb14b1c8d3804a3a7d31773bc7569837b71a4)
⦁ video: fbdev: smscufx: Fix use-after-free in ufx_ops_open()
(github.com/torvalds/linux/commit/5610bcfe8693c02e2e4c8b31427f1bdbdecc839c)
⦁ video: fbdev: smscufx: Fix several use-after-free bugs
(github.com/torvalds/linux/commit/cc67482c9e5f2c80d62f623bcc347c29f9f648e1)
⦁ char: xillybus: Fix trivial bug with mutex
(github.com/torvalds/linux/commit/c002f04c0bc79ec00d4beb75fb631d5bf37419bd)
⦁ bpf: Always use maximal size for copy_array()
(github.com/torvalds/linux/commit/45435d8da71f9f3e6860e6e6ea9667b6ec17ec64)
⦁ media: dvb-core: Fix UAF due to refcount races at releasing
(github.com/torvalds/linux/commit/fd3d91ab1c6ab0628fe642dd570b56302c30a792)
커리큘럼
전체
33개 ∙ 5시간 31분
수업 자료
가 제공되는 강의입니다.
강의 소개
03:37
리눅스 커널 개론
09:29
태스크란?
06:31
슬랩 할당자란?
08:14
디바이스 드라이버란?
06:19
모듈 프로그래밍
05:15
리눅스 커널 & 파일 시스템 빌드
09:19
qemu & gdb 세팅
05:30
CTF에서의 환경 세팅
06:00
마지막 업데이트일: 2020년 11월 02일