분류 전체보기139 [Dreamhack] Exploit Tech: Use After Free 이전 강의에서는 해제된 메모리에 접근할 수 있는 Use After Free 취약점에 대해 배워보았다. 이 취약점을 이용하면 메모리에 남아있는 데이터를 유출하거나 사용할 수 있었다.이번 강의에서는 User After Free 취약점이 존재하는 코드를 사용해 공격하여 셸을 획득하는 실습을 해본다.실습에 사용되는 바이너리와 libc 파일은 본 워게임의 첨부파일로 제공된다.1. 먼저 도커를 살펴보니 실행중이 아닌 컨테이너 목록이 다음과 같았다. 2. 저번 실습에서 my container에서 했으니 이 컨테이너를 실행해본다.docker start c34eeeb60805 3. 이제 컨테이너 내부에 들어가서 파일을 확인하거나 추가 작업을 할 수 있다. docker exec -it my_container /bin/ba.. 공부중/시스템 해킹 2024. 10. 6. [Dreamhack] Memory Corruption: Use After Free 원룸을 임대하여 거주하다가 계약이 만료될 경우, 세입자는 임대인에게 원룸 접근 권한을 반납해야 한다. 열쇠로 문을 열어왔다면 열쇠를 돌려주고, 도어락을 사용한다면 도어락 비밀번호를 재설정해줘야 한다. 그러면 임대인은 원룸을 청소하고 다시 세입자를 구한다.만약 이전 세입자의 접근 권한을 회수하지 않는다면, 계약이 끝난 뒤에도 그 원룸은 무단으로 사용될 수 있다. 또한 만약 방을 깨끗이 청소하지 않아서 이전 세입자의 개인정보가 적혀있는 문서가 남는다면, 다음 세입자가 이전 세입자의 개인정보를 알게 될 위험도 있다. 따라서 "접근 권한 회수"와 "깨끗한 청소"를 마친 뒤에 새 임대인을 구하는 것이 바람직하다.ptmalloc2 를 이용하여 메모리를 관리할 때도 이런 과정에 주의를 기울이지 않으면 비슷한 문제가 .. 공부중/시스템 해킹 2024. 10. 5. [Dreamhack] Background: ptmalloc2 부동산 중개업자가 하는 일이 새로운 주거리를 찾는 사람들과 주거지를 파려는 사람들의 만남을 도와서 주거지의 공실을 최대한 줄이고, 부동산 시장의 효율을 높이는 것이라고 할 수 있듯이, 운영체제에서 이러한 중개업자와 비슷한 역할을 하는 것이 Memory Allocator이다.운영 체제의 핵심 역할 중 하나는 한정된 메모리 자원을 각 프로세스에 효율적으로 배분하는 일이다. 모든 프로세스는 실행중에 메모리를 동적으로 할당하고, 할당한 메모리의 쓰임이 다하면 이를 해제한다. 이 과정은 매우 빈번하게 일어난다. 그래서 운영체제의 Memory Allocator는 이 동작이 빠르고, 메모리의 낭비 없이 이뤄지도록 특수한 알고리즘으로 구현한다. 몇몇 소프트웨어는 직접 구현한 Memory Allocator를 사용하기도 .. 공부중/시스템 해킹 2024. 10. 4. [Dreamhack] Exploit Tech: Format String Bug 선수 지식:PIE는 실행 파일이 메모리에 로드될 때마다 그 베이스 주소가 랜덤하게 결정되도록 하는 보호 기법이다. 즉, 전역 변수나 함수 등의 실제 메모리 주소는 프로그램이 실행될 때마다 바뀌게 된다. 이전 강의에서는 사용자의 입력을 포맷 스트링으로 사용하면 포맷 스트링 버그가 발생할 수 있음을 알아보았다. 이를 통해 임의 주소 읽기 및 임의 주소 쓰기가 가능했다. 예제로 printf 함수를 사용했지만 이외에 포맷 스트링을 사용하는 모든 함수는 해당 버그가 발생할 수 있으며,최근 유명 소프트웨어에서 로그와 관련된 함수의 오용으로 버그가 발생한 적이 있다.이번 강의에서는 포맷 스트링 버그 취약점이 존재하는 예제 코드를 사용하여 포맷 스트링 공격을 실습해보자.실습 목표는 changeme의 값을 1337로 바.. 공부중/시스템 해킹 2024. 10. 4. [Dreamhack] Memory Corruption: Format String Bug C언어에는 write, puts, printf 등 문자열을 출력하는 다양한 함수가 있는데, 그 중에서 printf는 포맷 스트링(Format String)을 이용하여 다양한 형태로 값을 출력할 수 있다는 특징이 있다.C언어에서는 printf 외에도 포맷 스트링을 인자로 사용하는 함수들이 많다. 대표적으로 scanf, fprintf, fscanf, sprintf, sscanf가 있다. 함수의 이름이 "f(formatted)"로 끝나고, 문자열을 다루는 함수라면 포맷스트링을 처리할 것으로 추측해볼 수 있다.이 함수들은 포맷 스트링을 채울 값들을 레지스터나 스택에서 가져온다. 그런데 이들 내부에는 포맷 스트링이 필요로 하는 인자의 개수와 함수에 전달된 인자의 개수를 비교하는 루틴이 없다. 그래서 만약 사용자가.. 공부중/시스템 해킹 2024. 10. 2. [Dreamhack] Exploit Tech: Out of bounds 이번 강의에서는 out_of_bound 워게임을 통한 함께 실습을 진행한다. x86, 즉 32비트의 아키텍처를 가지는 환경에서 배열의 임의 인덱스에 접근할 수 있는 경우에 진행할 수 있는 공격을 학습한다. 문제 목표 및 기능 요약이 문제의 목표는 한 데이터 영역에 원하는 정보를 쓸 수 있고, 배열의 원하는 인덱스에 해당하는 주소에 해당하는 문자열을 실행시킬 수 있는 환경이 주어진다.이 문제는 Ubuntu 22.04 운영체제에서 실습된다. ** 분석보호기법checksec을 사용하여 적용된 보호기법을 파악한다.환경에는 ASLR이 적용되어있고, 바이너리에는 NX와 Canary가 적용되어있다. PIE는 적용되지 않았다.ASLR이 적용되어 있기 때문에 실행 시마다 스택, 라이브러리의 주소가 랜덤화되고, NX가 .. 공부중/시스템 해킹 2024. 9. 28. [Dreamhack] Memory Corruption: Out of Bounds 프로그램을 개발할 때 같은 자료형의 변수나 객체를 여러 개 관리해야 하면 이들을 요소로 하는 배열을 선언하여 사용한다. 배열은 같은 자료형의 요소(Elements)들로 이루어져 있는데, 각 요소의 위치를 인덱스(Index) 라고 한다.처음 C언어에서 배열을 배우고, 사용할 때, 배열의 인덱스와 관련된 부분에서 자주 실수를 한다. 현실에서는 첫 번째 요소라고 할 것을 프로그래밍 할 때는 0번째 요소라고 해야하는데서 발생하는 인지적 실수, 사소한 부등호 실수, 그리고 인덱스를 벗어나서 참조할 수 있어도 경고를 띄워주지 않는 컴파일러 등이 주요 원인일 것이다.위와 같은 실수는 운이 좋으면 프로그램의 비정상 종료로 그치지만, 때에 따라 치명적인 취약점의 원인이 될 수있다.대표적으로는 배열의 임의 인덱스에 접근할.. 공부중/시스템 해킹 2024. 9. 28. [Dreamhack] Exploit Tech: Hook Overwrite Hook에는 갈고리라는 뜻이 있다. 이런 의미를 담아 컴퓨터 과학에서는 운영체제가 어떤 코드를 실행하려 할 때, 이를 낚아채어 다른 코드를 실행되게 하는 것을 Hooking(후킹)이라고 부르며, 이때 실행되는 코드를 Hook(훅)이라고 부른다. 후킹은 굉장히 다양한 용도로 사용된다. 함수에 훅을 심어서 함수의 호출을 모니터링하거나, 함수에 기능을 추가할 수도 있고, 아니면 아예 다른 코드를 심어서 실행 흐름을 변조할 수도 있다.예를 들어, malloc과 free에 훅을 설치하면 소프트웨어에서 할당하고, 해제하는 메모리를 모니터링할 수 있다. 이를 더욱 응용하면 모든 함수의 도입 부분에 모니터링 함수를 훅으로 설치하여 어떤 소프트웨어가 실행 중에 호출하는 함수를 모두 추적(Tracing)할 수도 있다.이러.. 공부중/시스템 해킹 2024. 9. 27. [Dreamhack] Background: RELRO / bypass: Hook Overwrite Background: Library에서 ELF는 GOT를 활용하여 반복되는 라이브러리 함수의 호출비용을 줄인다고 했다. GOT에 값을 채우는 방식은 다양하다. 지난 강의에서는 그 중에서 함수가 처음 호출될 때의 함수의 주소를 구하고, 이를 GOT에 적은 Lazy Binding을 소개했다.Lazy binding을 하는 바이너리는 실행 중에 GOT 테이블을 업데이트할 수 있어야 하므로 GOT에 쓰기 권한이 부여된다. 그런데 이는 앞서 소개한 공격 기법들에서 알 수 있듯, 바이너리를 취약하게 만드는 원인이 된다. 또한 ELF의 데이터 세그먼트에는 프로세스의 초기화 및 종료와 관련된 .init_array, .fini_array가 있다. 이 영역들은 프로세스의 시작과 종료에 실행할 함수들의 주소를 저장하고 있.. 공부중/시스템 해킹 2024. 9. 25. [Dreamhack] Background: PIE ASLR이 적용되면 바이너리가 실행될 때마다 스택, 힙, 공유 라이브러리 등이 무작위 주소에 매핑되므로, 공격자가 이 영역들을 공격에 활용하기 어려워진다. 그런데 지난 강의의 실습 addr을 떠올려보면, 다른 영역의 주소는 계속 바뀌었지만 main 함수의 주소는 매번 같았다. 이런 특징을 이용하여 공격자는 고정된 주소의 코드 가젯을 활용한 ROP를 수행할 수 있었다.이번 강의에서 배울 Position-Independent Executable(PIE)은 ASLR이 코드 영역에도 적용되게 해주는 기술이다. 이 기술은 보안성 향상을 위해 도입이 된 것이 아니라서 엄밀히 말하자면 보호기법은 아니다. 그러나 실제로는 ASLR과 맞물려서 공격을 더욱 어렵게 만들었기에 여러 글이나 발표에서 보호기법이라고 소개되기도 .. 공부중/시스템 해킹 2024. 9. 24. [Dreamhack] Exploit Tech: ROP x64 이번 강의에서는 basic_rop_x64 워게임을 통한 실습을 진행한다. x64, 즉 64비트의 아키텍처를 가지는 환경에서 Return-oriented programming(ROP) 기법을 학습한다 문제 목표 및 기능 요약이 문제의 목표는 버퍼 오버플로우가 일어나는 상황에서 ROP를 사용해 셸을 실행하는 것이다. 다음과 같은 개념을 숙지한 후 강의를 수강하자Return to LibcGOT OverwriteReturn-oriented Programming이 문제는 Ubuntu 22.04 운영체제에서 실습한다. ** 분석 및 설계분석보호기법checksec을 사용하여 적용된 보호기법을 파악한다.실습환경에는 ASLR이 적용되어있고, 바이너리에는 NX가 적용되어 있다. Canary와 PIE는 적용되지 않았다.AS.. 공부중/시스템 해킹 2024. 9. 22. [Dreamhack] Exploit Tech: Return Oriented Programming (ROP) 스택의 반환 주소를 덮는 공격은 스택 카나리, NX, ASLR이 도입되며 점점 어려워졌다. 공격 기법은 셸 코드의 실행에서 라이브러리 함수의 실행으로, 그리고 다수의 리턴 가젯을 연결해서 사용하는 Return Oriented Programming(ROP)로 발전했다.NX의 도입으로 셸 코드를 사용할 수 없게 된 것은 공격자에게 큰 제약이 되었다. 프로그래머가 작성한 코드만 실행해서 셸이 획득될 가능성은 거의 없는데, 임의의 코드를 주입해서 사용할 수도 없어졌으므로 공격자는 새로운 방법을 찾아야했다.그래서 지난 코스 Exploit Tech: Return to Library에서 살펴본 것과 같이 pop rdi; ret 같은 코드 가젯과 라이브러리의 system 함수를 사용하는 공격 기법이 새롭게 등장하였다.. 공부중/시스템 해킹 2024. 9. 22. 이전 1 2 3 4 ··· 12 다음