박주현 Exploit Helpers 안녕하세요 포너블을 도와주는 exploit helpers에 대해 발표하게된 박주현이라고 합니다.
Contents Who Am I 2. Exploit sequence Checking protection in binary – checksec.sh Finding exploitable vector – IDA Pro, Gdb-peda, Qira, Core dump Exploit – Pwntools 먼저 목차로는 크게 제 소개와 익스플로잇을 할때 저만의 순서? 랄까 그것에 따라서 헬퍼들을 정리해 보았습니다. 포너블 하시는 꽤 많은 해커분들이 저와 비슷한 과정을 거치시는것 같습니다. 자기소개는 아무도 관심없겠지만… 컨퍼런스 들으러 가보면 다른 발표자님들 하는거 보면 너무 멋있어서 저도 넣어보았습니당 ㅎ.. 우리 함께 멋진 툴키디가 되어봅시다~
Who Am I X ㅡ ㅁ Terminal 누구세요? 뭐 하고 계세요? cdor1@Ubuntu ~$ whoami Name = 박 주 현 Nick = cdor1 Age = 17 School = 한세사이버보안고등학교 해킹보안과 Team = H3X0R Belong to = 서울여대정보보호영재교육원 3기, KSIA 2. 뭐 좋아하세요? Pwnable, Reversing 뭐 하고 계세요? Pwnable.kr 문제풀이.. Heap exploit 공부.. OS 원리 공부.. arm, mips공부.. 음 저는 박주현이고요 올해부터 한세사이버보안고등학교 해킹보안과에 재학중입니다. 팀은 저번에 ctf를 온라인 상에서 개최했었던 h3xor에 속해 있구요. 닉네임은 cdor1이라는 이름을 가지고 대회에 나가거나 워게임을 풀고 있는데 저는 처음에 제 중학교때 별명이였던 컴돌이를 생각하고 만든것인데.. 다들 보시고 크도르원 아니면 씨도르원이라 부르셔서 편하신대로 해석하시면 될 것 같네요 ㅎ.. 해킹 맛보기라는 책을 읽고 제가 공부하고 싶은 분야를 포너블로 정했었고 어셈블리 언어와 친숙해지고 싶어서 리버싱 공부도 줃곧 해왔는데 제가 공부하는 주 분야가 되어서 포너블과 리버싱을 주 분야로 생각하고 공부하고 있습니다. 요번 인코그니토 컨퍼런스 가서 힙 익스플로잇이 스택에서 터지는 취약점보다 훨씬 많이 발견되고 공격된다는 것을 알고 힙익스플로잇도 공부중에 있습니다. 그리고 추가적인 목표였던 os개발도 공부중이고 요번 순천향대 본선에 가서 털렸던 arm문제때문에 i386아키텍쳐 뿐만 아닌 다른 아키텍쳐도 공부하겠다고 마음먹었습니다. cdor1@Ubuntu ~$ https://fb.com/parkcdor1
Exploit sequence Checking protection in binary - checksec.sh Finding exploitable vector - Static analyze : IDA Pro Dynamic analyze : Gdb-peda, Qira, Core dump 3. Exploit - Pwntools 먼저 바이너리에 어떠한 보호 기법이 탑재되어 있는지 알아보기 위해 checksec.sh를 사용하는데 이 친구가 뭐하는 친구인지 알아보도록 합시다.
Checksec.sh Checking Protection 이런 식으로 뒤에 –file옵션을 주고, 바이너리를 인자로 주게되면 카나리 존재 여부.. Nx활성화 여부.. Pie존재 여부.. 등 다양한 바이너리 보호 기법에 대해 출력해줍니다. 파일 다운로드는 밑에 trapkit.de사이트에서 할 수 있습니다. 추가로 설명드라자면 RELRO 라는 보호기법은 리로케이션 리드-온리의 줄임말로 ELF파일의 데이터 섹션을 보호하는 기술입니다. 컴파일 할 때에 파티클 리록 옵션을 주게되면 .ctors, .dtors, .jcr, .dynamic 영역이 read-only 옵션으로 변경되고 풀 리록 옵션을 주게되면 .ctors, .dtors, .jcr, dynamic, .got 섹션들이 모두 read-only옵션으로 변경됩니다. 내 got overwrite ㅠㅠ… 카나리는 SSP라는 기법이 적용되면 붙게되는 부가 옵션? 과 같은 걔념인데 스택에 카나리값을 포함시켜 실행 전과 후의 값을 비교해 스택이 망가졌는지 망가지지 않았는지 체크를 한답니다. 이를 우회하는 기술이 카나리 릭입니다. 다음으로 nx에 대해서 설명을 해드리자면 노 익스큐터블의 약자로 스택 혹은 힙 영역에 실행 권한을 부여하지 않는 것입니다. 이를 우회하는 공격이 텍스트 섹션에서 명령어를 한줄한줄 빼와 공격하는 rop공격이죠. 이 공격에 대해서는 후에 시연하면서 자세히 말씀드리겠습니다. 그리고 pie라는 보호기법은 code영역까지 랜덤화를 시켜버리는 아주 사악한 기법이죠 -> 이것두 ulimit –s unlimited로 스택 주소를 무한대로 넓혀버리면 우회됩니다. 한번 직접 보시죠. 이 파일은 plaid ctf 2013에 출제되었던 알오피사우르스?? 문제인데 nx빼고는 아무런 보호기법이 적용되어 있지 않습니다. http://www.trapkit.de/tools/checksec.html
How Checksec.sh Works? 1. Find symbol name 2. Segment header 3. File Type 4. Entry Checksec.sh의 원리에 대해서 말씀드리자면 바이너리에서 심볼 네임을 찾거나 세그먼트 헤더를 뒤집고 파일 타입에 대해서 알아보기도 하고 엔트리 포인트를 체크하기도 합니다. 예를 하나 들자면 카나리를 넣는 SSP가 활성화 되어있다면 바이너리에 __stack_chk_fail이라는 함수가 포함되어야만 하는데 이를 통해서 checksec.sh는 이 친구가 어떠한 보호기법을 가지고 있나 체크를 한답니다.
Exploit sequence Checking protection in binary - checksec.sh Finding exploitable vector - Static analyze : IDA Pro Dynamic analyze : Gdb-peda, Qira, Core dump 3. Exploit - Pwntools 자 2번째 세션에서는 어디서 취약점이 일어나는지를 찾는 부분입니다. 먼저 대표적인 정적 분석의 꽃? Ida에 대해서 말씀드리겠습니다.
IDA Pro Hex-Ray Assembly ->Disassemble-> C language https://www.hex-rays.com/products/ida/processors.shtml Ida는 다양한 아키텍쳐들의 어셈블리언어를 디스어셈블 해주는 기능을 가지고 있습니다. 근데 저는 이 ida를 사용하면서 제일 불안했던 부분이, 안티디버깅 기법처럼 안티아이다 기법도 곧 나올텐데 그러면 나같은 포너블 뉴비는 어떻게 취약한 부분을 찾지? 싶었습니다. 그래서 실무 경험이 많으신 분들께 질문을 드려본 결과 아직까지 아이다를 막을만한 난독화 기법은 꽤 후에 나올것이라고 하시더군요. 정말 다행입니다 앗 참 구매는 저기 밑에서 하시길 바랍니다 가격은 1129달러 부터 시작됩니다 -> 원화론 125만원 쯤 됩니다. -> 여기다 플러그인까지 달면… 엇! 이쯤 다 구매하실수 있으시잖아요? Hex-Ray Assembly ->Disassemble-> C language https://www.hex-rays.com/products/ida/
How IDA Pro works? Automate hand-ray into Algorithm DWORD PTR [esp+0x8],0x3 mov DWORD PTR [esp+0x4],0x2 mov DWORD PTR [esp],0x1 call 0x80483c4 <babo> babo(1,2,3); mov edx,DWORD PTR [ebp+0x8] mov DWORD PTR [esp+0x4],edx mov DWORD PTR [esp],eax call 0x80482f4 <printf@plt> (gdb) x/s 0x8048510 0x8048510: "%d\n" printf(“%d\n”,argv[1]); 아이다의 작동 원리라 함은, 우리가 어셈블리를 c로 바꾸는 작업(핸드레이)를 알고리즘으로 자동화를 시키는 것 입니다. -소스설명 - Automate hand-ray into Algorithm
Exploit sequence Checking protection in binary - checksec.sh Finding exploitable vector - Static analyze : IDA Pro Dynamic analyze : Gdb-peda, Qira, Core dump 3. Exploit - Pwntools 다음으로 동적 분석입니다. 먼저 gdb의 업그레이드 버전? gdb-peda에 대해서 말씀 드리겠습니다.
Gdb-peda 페다는 많은 기능을 가지고 있습니다. 이전 gdb와 다르게 코드가 흘러가고 스택의 상태와 레지스터의 상태 들을 시각화해주고 disas명령어도 call하는 구문을 하이라이팅 해서 이쁘게 표현해주었습니다.
Gdb-peda How To Install 뭐 이렇게 공격 스크립트를 짜주기도 합니다만 아직까지 이 스크립트를 사용하시는 분들을 뵌 적이 없네요 ㅋㅋ… 그리고 가장 중요한 설치방법에 대해서 말씀드리자면 저 두가지 명령어를 복붙해서 사용하시면 됩니다. 그러면 분명히 에러가 터질텐데 peda는 2.7버전 기반의 파이썬을 사용하는데 리눅스가 3.x버전의 파이썬을 사용하게 되면 구문 에러가 뜹니다. 그래서 원본 gdb를 삭제하고 새로운 gdb소스를 받아 2.7버전으로 컴파일 하는 수 밖에 없습니다. (정말 오래걸립니다..) How To Install 1. git clone https://github.com/longld/peda.git ~/peda 2. echo "source ~/peda/peda.py" >> ~/.gdbinit IF error Downgrade your linux python version 3.x.x -> 2.7.x or Downgrade your gdb version
Gdb-peda https://github.com/longld/peda 이런 식으로 가젯을 찾아주기도 하고 쉘코드를 만들어 주기도 합니다. Vmmap도~~ https://github.com/longld/peda
How Gdb-peda works? Visualization the stack & code & register Peda의 원리라 함은 별로 언급해드릴만한게 없습니다. 제작자가 정말로 대단한 일을 한 것은 맞지만 본래 gdb의 스택, 코드, 레지스터를 시각화 하고 나머지 ropsearch나 쉘코드를 뿌려주는 것은 제작된 툴을 탑재하거나 쉘코드를 안에 저장해둔 것 뿐입니다.. Visualization the stack & code & register
Exploit sequence Checking protection in binary - checksec.sh Finding exploitable vector - Static analyze : IDA Pro Dynamic analyze : Gdb-peda, Qira, Core dump 3. Exploit - Pwntools 2번째로 제 발표의 핵심, qira에 대해서 소개하도록 하겠습니다.
Qira Timeless Debugger http://qira.me 이렇게 보기에는 UI가 이쁘지도 않고~ 뭐가 다른지 모르겠고~ 하는데 qira의 가장 큰 장점은 타임리스입니다. 쉽게 설명드리자면 시간에 구제를 받지 않습니다. 명령어 트레이싱의 흐름이 이제까지 밑으로만 이어졌다면 이젠 위로도 올라갈 수 있습니다. 여담을 말씀드리자면 지오핫이 파이어폭스 취약점을 찾을 때, 이 퀴라가 없었으면 불가능 했을 것이라고 발표에서 언급하기도 했었습니다. -실습- 파이어폭스 메시지 보여주기 -t옵션 -s옵션 쓰면서 트레이싱 x.inetd.d Timeless Debugger http://qira.me
How Qira works? Save the status at the Previous command 퀴라의 핵심 원리라 함은 전 명령어의 스택 상태라거나 레지스터 상태라거나 부분부분 변경된 부분만 떼어서 저장하는 것인데, 설명은 이렇게 해도 효율적으로 상태를 저장하기 위해서 알고리즘에 정말 많은 노력을 기울였을것 같습니다.
Exploit sequence Checking protection in binary - checksec.sh Finding exploitable vector - Static analyze : IDA Pro Dynamic analyze : Gdb-peda, Qira, Core dump 3. Exploit - Pwntools 마지막 동적 분석으로는 core dump가 있습니다. Ftz를 풀때부터 써오던 오래된 친구입니다.
Core dump How To Use 1. sudo -s Ftz를 풀 때는 그대로 문제 폴더에 dump가 쌓여서 사용하기 편리했는데 제 우분투는 그렇지 않아 밑에 설정을 해줘야만 했습니다. 여러분들도 같을 것입니다. 먼저 앞에다 sudo를 붙여 2번째 명령어를 실행하면 실행이 되지 않아 1번째로 root로 사용자를 전환해주고 2번째로 kernel밑에 있는 패턴파일을 제 홈폴더 안으로 생성되도록 넣어줍니다. Ulimit명령어를 이용해서 코어파일이 생성되는 용량 제한을 풀고, 비정상 종료를 시킨 뒤에 4번처럼 생성된 덤프 파일을 gdb로 바이너리와 함께 열어주시면 됩니다. -실습- How To Use 1. sudo -s 2. echo "/home/cdor1/core.%e" > /proc/sys/kernel/core_pattern 3. ulimit –c unlimited 4. gdb Binary core.Binary
How Core dump works? 0x41414141 in () ? When the interruption occurred, system makes core dump Like SIGSEGV 앞에서도 말씀 드렸듯이 시스템이 비정상적으로 종료가 되면 dump를 사용할 수 있게 되는데 대표적인 2가지 비정상적 종료 중 SIGSEGV가 눈에 띕니다. SIGSEGV는 우리가 SEGMENTATION FAULT를 발생시키면 발생하는 시그널인데 이는 자신에게 할당되지 않은 세그먼트 영역을 건들였을때 발생하는 시그널입니다. SEGFAULT는 우리가 대표적으로 BOF공격을 성공시키면 eip레지스터가 정확하지 않은 부분을 가르켜서 발생하는 것입니다. 포너블을 하면서 더미값으로 a를 막 몇백개씩 넣어보다가 SEGFAULT가 뜨고 Core dump를 확인했는데 0x41414141 in ()?가 나올 때의 쾌감이란.. 0x41414141 in () ?
Exploit sequence Checking protection in binary - checksec.sh Finding exploitable vector - Static analyze : IDA Pro Dynamic analyze : Gdb-peda, Qira, Core dump 3. Exploit - Pwntools 마지막으로 13회 해킹캠프때 재혁님의 발표이기도 했던 pwntools에 대해 설명 드리겠습니다.
Pwntools Make exploit easily, short, spend less time, look nice 폰툴즈의 가장 큰 장점이라 함은 너무 많은데.. 대표적으론 익스플로잇을 쉽고, 짧고, 빠르고, 이쁘게! 만들어 줍니다. 설치는 밑에 있는 사이트에서 설치법을 알려주고 있구요 Ppt에선 모든 pwntools의 기능에 대해서 보여주지는 않지만 조금 있다가 대표 사이트에 들어가 하나하나 훑어보려고 합니다. 왼쪽 사진을 보시면 뭐 초기 설정에 ~ ida에서 plt, got 찾고 ~ 섹션 찾고 ~ 해서 주솟값을 막 써놨는데! 익스플로잇이 안된다? 점검 점검 점검 ~ 삽질 삽질 삽질 ~ 오류 오류 오류 ~ 알고보니 주솟값 문제 ~ 자살 오른쪽을 보시면 초기설정뿐만 아니라 그냥 elf파일을 불러와서 자동적으로 plt, got를 전부 가져다 줍니다. 훨씬 짧고 보기쉬워졌죠? 이거 뿐만 아니라 훨씬 많은 기능이 있습니다. 한번 보시죠. Make exploit easily, short, spend less time, look nice http://pwntools.readthedocs.io
How Pwntools works? Pwntools simplifies the exploit code into 1 line s = socket(AF_INET,SOCK_STREAM) s.connect(‘cdor1.com’, 0113) s = remote(‘cdor1.com’, 0113) p = lambda x: struct.pack("<L",x) up = lambda x: struct.unpack("<L",x)[0] payload += p(system_plt) payload += p32(system_plt) 폰툴의 기능에 대해서는 엄청 말씀드릴게 많지만 폰툴은 예전에 쓰이던 익스플로잇 코드들? 을 하나로 묶어 훨씬 편리하게 사용하도록 했습니다. 확실히 해킹 팀에서 만든것이라 와 이런 세심한 부분까지? 싶은 것들이 매우 많이 존재합니다. Pwntools simplifies the exploit code into 1 line
Practice Plaid CTF 2013 Ropasaurusrex With Plaid CTF 2013 Ropasaurusrex 이제 이 문제를 가지고 제가 이전에 설명드린 익스플로잇 헬퍼들로 익스플로잇을 해 볼 것인데 이들이 어떤 기능인지 설명하고 전체적인 사용 방법에 대해서 말씀 드리겠습니다.
THANK YOU http://cdor1.tistory.com 제 발표를 끝까지 들어주셔서 감사합니다. 발표 자료는 제 닉네임인 컴돌이.tistory.com에 남겨두겠습니다. 질문있으신분??