IDA 5.6 Appcall 테스트 완료

Posted 2010.01.05 04:31 by beistlab
IDA 5.6의 주요 특징 중에 하나인 Appcall 기능에 대해서 테스트를 마쳤습니다. 잘 되는군요. 이걸 어디다가 써야하나라고 처음에 생각했던 것은 함수 단위로 수행하는 Fuzzing에 사용할 수 있을거라 예상했는데, 그렇게 간단한 작업은 아닐 겁니다.

대상 프로그램이 작다면 모르겠지만 규모가 좀 있는 것이라면, 어떤 함수를 표적으로 삼을지 선정하는 것도 쉽진 않기 때문입니다. (내가 Input을 줄 수 있는 함수인지도 미리 파악해야 하는 등 사전 작업이 있음)

Appcall 테스트하는 김에 IDAPython도 좀 만져봤습니다. 여태까지 hello world 정도만 찍어봤었는데 오늘 몇줄 정도 짜봤습니다. 재밌긴한데 익숙치가 않아서 자꾸 시행 착오가 생기니 짜증 만땅.. -_-;

Appcall에 대한 글은 나중에 다시 다루도록 하겠습니다. 창피하지만 어차피 국내에는 IDA 정품 유저가 별로 없어서 Appcall 기능을 시도해보실 분들이 금방은 안 생길 것이기 때문에 ㅋㅋ

'보안 관련 정보' 카테고리의 다른 글

RefreshDebuggerMemory and dbg_bpt() in IDAPython  (0) 2010.01.10
SEHOP 깨기 by sysdream  (3) 2010.01.05
IDA 5.6 Appcall 테스트 완료  (0) 2010.01.05
[Fuzzer] Sulley in f(x)  (13) 2010.01.04
던킨 도너츠 공격 당하다  (2) 2010.01.03
DPC of PaiMei  (0) 2010.01.03

Tag : appcall, ida 5.6

Write your message and submit

눈처럼 내리는 똥

Posted 2010.01.04 09:52 by beistlab


지금 갑자기 열라 눈 내리고 있네요. 직장인들 출근 길이 걱정이군요.

'잡담' 카테고리의 다른 글

good bye my poor vm image  (7) 2010.05.02
밤 늦은 시각 맥북과 함께  (3) 2010.01.05
눈처럼 내리는 똥  (2) 2010.01.04
IE에서 블로그 보니 안습이군요  (1) 2010.01.03
BEERWARE-BLOG  (4) 2009.11.28

  1. binish

    | 2010.01.07 11:23 신고 | PERMALINK | EDIT | REPLY |

    걱정했던 내 똥 차 시동이 안 걸린지 이틀째야... 휴~

  2. beistlab

    | 2010.01.08 09:53 신고 | PERMALINK | EDIT | REPLY |

    ㅋㅋㅋㅋ 초밥이 되었군요

Write your message and submit

[Fuzzer] Sulley in f(x)

Posted 2010.01.04 02:21 by beistlab
오늘은 Sulley에 대해서 알아보도록 하겠습니다. 왜냐? 구글에서 한국어 페이지로 sulley를 검색했을 때, 개인적인 의견을 담은 글은 아직 없길래 ㅋㅋ

해킹 공부를 하는 대부분의 분들이 아마도 FUZZING이란 단어는 익숙하실 겁니다. FUZZING은 큰 개념을 말하는 것이고, 이것을 하기 위해서 구현하는 방법도 다양하며, 기술의 수준에 따라 여러 단계로 나눌 수 있습니다. 자세한 내용은 인터넷에서 조사를 해보시거나 다음 책 두개를 추천드립니다.

Fuzzing: Brute Force Vulnerability Discovery
http://www.yes24.com/24/goods/2513138?scode=032&srank=1
Fuzzing for Software Security
http://www.yes24.com/24/goods/2871371?scode=032&srank=2

이름이 몬스터 주식회사에 나오는 몬스터인 Sulley와 똑같습니다. 이 툴의 제작자 중에 한명이 Pedram Amini인데, 얼마 전에 DPC에 대해서 다룰 때 소개드린 PaiMei의 제작자이기도 합니다. 참고로 PaiMei는 킬빌2에 나오는 도사 이름입니다. Python으로 작성되어 있습니다.



먼저 Sulley를 간단하게 소개하자면 알려진 Fuzzer들 중에서 비교적 최신의 기술을 포함하고 있는 괜찮은 프로그램입니다. 도대체 이게 다른 것들에 비해서 뭐가 나은 것이냐? 기술적인 난이도로 구분할 수 있는데, 엄격하게 평가하여 나눈 것이 아니라, 기존 공개된 Fuzzer들의 한계점을 기준으로 대충 말씀드리니 대략 참고하시기 바랍니다. (해당 Fuzzer들의 이름은 말하지 않겠음, 또한 File format과 Protocol fuzzing을 구분하지 않겠습니다.)

  • 1단계: 아무런 참조 요소 없이 그냥 막장으로 무조건 Random 데이터를 생성하는 것
  • 2단계: 정상적인 데이터를 하나 주면, 툴이 알아서 Random하게 mutation해주는 것
  • 3단계: 정상 데이터를 참조하여, Block based로 일정한 루틴으로 생성해주는 것
  • 4단계: Block based 기반이되, 생성할 데이터에 대해 사용자가 룰을 줄 수 있는 것
  • 5단계: 4단계 기능을 지원하며 Fuzzing에 필요한 부가 기능이 잘 갖추어져 있는 것, 대표적으로는 오류가 났을 때 탐지하여 결과를 알려주는 Crash detector, 그외 다수 있음

참고로 5단계로 구분하긴 하였으나 5단계가 최상 클래스가 아니고 그 이외에도 여러 가지 요소가 있습니다. Sulley는 5단계까지를 어느 정도 만족하는 프로그램이라고 할 수 있지만 한계가 분명히 있습니다.

예를 들어, Sulley는 동적 데이터 분석을 하지 않기 때문에, 자기가 생성한 데이터를 대상 프로그램에 먹이고 난 후의 결과를 보고도, 해당 결과가 좋은지 안 좋은지 알 수 없어서 생성할 데이터의 효율을 Runtime에서는 높일 수가 없습니다. 현재, 동적으로 분석을 하며 Fuzzing 데이터의 효율성을 높이는 것 중에 대표적인 것은 fuzzgrind가 있습니다. (좀 더 자세히 알고 싶으신 분은 http://beist.org 게시판에서 "fuzzgrind" 검색)

Block-based는 단순합니다. 어떤 데이터들이 연속적으로 있는데, 이 데이터들은 각각 경계가 나눠진 상태이고, 어떤 필드는 integer 타입일수도 있고 어떤 필드를 string 타입일수도 있습니다. 혹은 서로 같은 타입의 연속된 집합일 수도 있습니다. 어쨌거나 여러 필드들이 모여있는 Block이 있는데, 컴퓨터 프로그램에서 Block은 보통 하나의 개체로 취급할 수 있습니다.

한글이나 워드 파일 중 아무거나 Hex-editor로 열어보세요. 우리가 인지할 수 있는, Ascii 형태의 데이터도 있고, 인지할 수 없는 non-ascii 형태의 데이터도 있을 겁니다. 이처럼 각각의 데이터 타입들이 연속적으로 이루어져있고, 하나로 모이게 된거죠. 복잡한 파일 포맷의 경우 계층적으로 Block이 나누어져있기 때문에 파일 자체를 하나의 Block으로 볼 수는 없지만 전체적인 개념은 그렇습니다.

Block-based fuzzing이란 말 그대로, 즉 Block을 기반으로 Fuzzing을 한다라는 것입니다. 그냥 마구잡이로 아무 데이터나 Random하게 바꾼 후 Fuzzing을 하는 것이 아니라는, 어떤 그런 막연한 감이 오지 않습니까?

Sulley는 단순히 Block-based Fuzzing 기능을 지원하는 차원이 아니라, Block-based 방식으로 Fuzzing을 하되, 데이터를 실질적으로 어떻게 생성할건지, 사용자가 잘 제어할 수 있도록 설계되었습니다. 예를 들어, 여러 가지 필드가 있는데 그중에서 문자열 데이터에 대해 제어를 하고 싶다고 가정하겠습니다. 다음과 같은 입력이 들어가는 문자열 데이터가 있습니다.

http://node1.download_center.org/download.zip


한 눈에 봐도 HTTP의 URL인 것을 알 수 있습니다. 그리고 우리가 공격할 대상 프로그램에서 위 필드를 파싱하는 부분이 다음과 같은 C 언어로 작성되어 있다고 가정합니다. 인자로 넘어가게 되는 char *url 부분이 위의 URL 데이터입니다.

void parsing_filename(char *url) {
        char bof[256];
        char *p;
        if(strncmp(url, "http://", strlen("http://")))
                exit(0);
        if(!(p=strstr(url+8, "/")))
                exit(0);
        strcpy(bof, p);
}


3초 만에 인지할 수 있는 취약점이 맨 마지막 중에 보입니다. strcpy() 함수죠. 소스 코드 오디팅이나 바이너리 오디팅을 하고 있는 중이라면 취약점을 금방 발견할 수 있겠지만 지금은 대상이 어떤 구조로 된지 모르는 상태로 취약점을 점검하고 있는 중이라 알 수 없습니다.

위 소스 코드를 잊고, fuzzing을 통해 취약점을 발견해야 한다고 가정해봅시다. 컴퓨터 프로그램의 거의 대부분은 분기문으로 이루어져 있다고 볼 수 있습니다. 작위적으로 제작된 코드이긴 하지만 위 코드만 봐도 exit(0); 문이 2개입니다. 만약 위 조건문 2개를 성공적으로 만족시키지 못한다면 strcpy() 함수로 도달하기 전에 프로그램이 종료될 것입니다.

자 그럼, 상식적으로 생각해봅시다.

http://node1.download_center.org/download.zip


우리가 위와 같은 형태의 문자열을 넣을 수 있다는 얘기는, 프로그램에서 URL이 정상적인지 검사하는 부분이 있을 가능성이 매우 높다는 것입니다. 즉, 그 말은, 해당 프로그램의 제작자가 완전히 슈퍼 허접이 아니라면 기본적인 검사 루틴은 구현했다는 것이구요.

parsing_filename에서 보시다 시피, 사용자가 입력한 문자열이 "http://"로 시작해아 한다거나, 도메인 이후의 파일 정보가 있어야 된다거나, 하는 기본적인 검사를 수행할 겁니다. 그렇지 않으면 바로 exit(0);를 수행해서 프로그램을 종료시켜버립니다.

즉, Random이라는 요소가 Fuzzing에서 굉장히 중요한 것임에도 불구하고, 대상 프로그램의 함수 내에서 효율적으로 처리되기 위해서는, Random하게 생성될 데이터의 기본적인 뼈대는 맞춰줘야 된다는 이야기입니다.

이 경우에는 "http://"로 시작하게 하고, 도메인 네임 이후에 "/"를 추가로 넣어주면 기본적인 뼈대를 맞춰줄 수 있습니다. Block-based를 설명한다더니 왜 이런 쓰잘데기 없는 걸 설명하냐고 생각하실 타이밍입니다. 바로 Sulley에서는 사용자로 하여금

"데이터 생성할 때 이 문자는 반드시 포함해라."
"이 문자는 변하지 않지만 다른 문자 필드들은 랜덤하게 변하게 해라."
"흠, 이 문자는 변해도 되지만, 완전한 랜덤은 아니야, 이 범위 내에서만 변하게 해라."

이런 룰을 지정하면서 데이터를 생성하게끔 할 수 있습니다. 이런 면이 Sulley의 장점입니다. Python으로 작성되었기 때문에 룰도 아주 간단하게 할 수 있습니다. 문법은 밑의 레퍼런스들을 참고해보시기 바랍니다.
(이 내용은 Code coverage와 관련이 있습니다. fuzzgrind도 그렇고 많은 동적 분석 방법들이 Code coverage를 개선시키기 위하여 노력하는데 왜 그런 작업들이 필요한지 이제 이해하기가 한결 수월해지셨을거라 생각합니다.)

다른 장점을 알아볼까요? 위 외에도 Sulley의 좋은 점으로는 Crash detector와 Network monitor, 그리고 Web 기반의 Report interface입니다. Crash detector는 말 그대로 우리가 입력한 어떤 데이터로 인하여 대상 프로그램이 Crash되었을 때의 시점에 대해서 잘 탐지하고 기록해주는 기능을 합니다. 가장 기본적인 정보들로는 레지스터가 있겠습니다.
[GrayHat Python에서 발췌, Crash Detector]

Network monitor는 우리가 Fuzzing을 수행할 때 Network를 통해 대상 프로그램과 주고 받는 프로그램들을 Recording하고, 해당 패킷 데이터들이 유용하다고 판단되었을 때 이를 다시 재현하기 쉽게끔 도와주는 역할을 합니다. WinPcap 라이브러리를 이용합니다.

Web 기반의 Reporting 시스템은 편리합니다만 별 특징은 없습니다. 현재 Fuzzing이 어디까지 진행되고 있는지 보여주고 Crash가 났을 경우에 간단한 로그도 보여줍니다. 또 다른 특징이라면 Sulley를 이용할 경우, Fuzzing이 세션이라는 개념으로 유지가 되는데, 별 특별한 것은 아니지만 어느 정도의 시간 동안 진행했다가 잠시 중단하고 재개할 수 있는 등, 사용자 입장에서는 편리한 기능이 있습니다.

[GrayHat Python에서 발췌, Web interface]

그외에도 Sulley의 장점은 많이 있지만 저도 자세히는 모르기 때문에 여기서 접도록 하죠. Fuzzing을 잘 모르는 상태인데, 시작해보고 싶으신 분은 Sulley부터 시작하셔도 크게 무리가 없을 겁니다. 아래 레퍼런스가 좋은 참고가 될 것이고 실제 예제를 쉽게 설명한 것은 GrayHat Python Chapter 9에 나와있습니다. 전 PDF로 봤는데 얼마 전에 번역서도 나와있다고 하네요.

헉 그냥 짤막하게 쓰려고 했는데 쓰다 보니 생각보다 길어졌군요. 마침 아직 호가든 한병이 남아서 다행입니다.

REFERENCES
Sulley PDF - http://www.fuzzing.org/wp-content/SulleyManual.pdf
CODE - http://code.google.com/p/sulley/
BOOK - GrayHat python chapter 9

'보안 관련 정보' 카테고리의 다른 글

SEHOP 깨기 by sysdream  (3) 2010.01.05
IDA 5.6 Appcall 테스트 완료  (0) 2010.01.05
[Fuzzer] Sulley in f(x)  (13) 2010.01.04
던킨 도너츠 공격 당하다  (2) 2010.01.03
DPC of PaiMei  (0) 2010.01.03
New features of IDA 5.6  (0) 2010.01.01

Tag : block-based, fuzzer, fuzzing, grayhat python, sulley

  1. ashine

    | 2010.01.04 10:58 신고 | PERMALINK | EDIT | REPLY |

    좋은 글 이네요 ㅋㅋ
    잘봤어요 ㅎㅎㅎ

  2. beistlab

    | 2010.01.04 17:56 신고 | PERMALINK | EDIT |

    그대! 좋은, 글!

  3. uptx

    | 2010.01.04 12:20 신고 | PERMALINK | EDIT | REPLY |

    캬~ 이제 글 아주 잘 보이네!!! 방문자의 소리에 귀 기울일줄 아는 훌륭한 관리자군요!
    ㅎㅎ

  4. beistlab

    | 2010.01.04 17:56 신고 | PERMALINK | EDIT |

    ㅋㅋ 전 성실한 관리자

  5. howard

    | 2010.01.04 12:33 신고 | PERMALINK | EDIT | REPLY |

    정말정리를 잘하셨네요
    좋은글 잘보고갑니다. ㅋ

  6. beistlab

    | 2010.01.04 17:57 신고 | PERMALINK | EDIT |

    감사!

  7. jz

    | 2010.01.04 17:16 신고 | PERMALINK | EDIT | REPLY |

    kewl!!!.. 헐 요거만썼더니 나를 차단했단 메시지가 나옴 ㅅㅂ 영어댓글은 차단함?ㅋㅋㅋ

  8. beistlab

    | 2010.01.04 17:58 신고 | PERMALINK | EDIT |

    티스토리 댓글 기능이 좀 병맛임 ㅠㅠ
    스팸 막으려고 한 건 이해는 가는데
    무엇 때문에 차단됐는지 메시지를 명료하게
    출력하도록 바꿔야 할 듯 ㅋㅋ
    참고로 전 스팸 설정 하나도 한거 없음 -_-;

  9. jz-

    | 2010.01.04 20:09 신고 | PERMALINK | EDIT | REPLY |

    ㅋㅋ 그렇슴메?
    새해 복 많이 받으셈 ㅋㅋ
    좋은 위치 감사 당신을!

  10. beistlab

    | 2010.01.05 13:50 신고 | PERMALINK | EDIT |

    ㅋㅋ 그대! 좋은, 날을!

  11. n0fate

    | 2010.01.11 17:10 신고 | PERMALINK | EDIT | REPLY |

    당신의 글에 감사한다! 매우! :)

  12. Eugene

    | 2010.01.17 23:10 신고 | PERMALINK | EDIT | REPLY |

    Nice introduction. Co-incidentally, I'm planning to play with Sulley this week ;)

    (ㅋㅋ 그대! 좋은, 날을 <-- pasting some random Korean words so that I can post this comment :)

  13. beistlab

    | 2010.01.17 23:11 신고 | PERMALINK | EDIT |

    you're a hacker!!!!!

Write your message and submit

던킨 도너츠 공격 당하다

Posted 2010.01.03 20:31 by beistlab
제목이 좀 낚시군요. ㅋㅋ 얼마 전에 CCC가 열렸습니다. 유럽에서 가장 큰 컨퍼런스이며 독일에서 매년 개최됩니다. 저도 작년엔 구경하러 다녀왔었었죠. 이번 CCC에서 DDoS(Distributed Denial of Service)와 관련된 주제가 있나 해서 좀 찾아봤는데 던킨 도너츠가 나오는 겁니다.

도대체 던킨 도너츠가 무슨 연관이 있길래 자꾸 CCC와 연관되어 검색이 되나 했더니 CCC에 참가했던 nerds들이 장난을 쳤군요. 던킨 도너츠 매장에 단체로 찾아가서 오프라인 DDoS를 때려버린 것입니다. 사진과 동영상입니다.

사진: http://tinyurl.com/yd8eedr
동영상: http://tinyurl.com/ykcdkh7

이런 누가 geek들 아니랄까봐 ㅋㅋ

'보안 관련 정보' 카테고리의 다른 글

IDA 5.6 Appcall 테스트 완료  (0) 2010.01.05
[Fuzzer] Sulley in f(x)  (13) 2010.01.04
던킨 도너츠 공격 당하다  (2) 2010.01.03
DPC of PaiMei  (0) 2010.01.03
New features of IDA 5.6  (0) 2010.01.01
IE zeroday == $60k  (0) 2009.12.20

Tag : 26c3, CCC, DDOS, dunkin donuts

  1. Mr.Pro

    | 2010.02.22 01:53 신고 | PERMALINK | EDIT | REPLY |

    Wow ㅋㅋ
    DDoS를 여기서도 볼수 있군요...ㅋㅋ
    뭐라고 하면서 돌진하는 건가요..
    끽끽도라 끽끽도라 이러는데...

  2. ㅁㄴㅇㄹ

    | 2010.02.25 17:28 신고 | PERMALINK | EDIT | REPLY |

    던킨도너츠라고하면서 이동하네요ㅎㅎ

Write your message and submit

IE에서 블로그 보니 안습이군요

Posted 2010.01.03 19:47 by beistlab
전 맥을 써서 주로 파이어폭스에서 제 블로그에 들어오는데 간만에 IE로 들어와봤더니 폰트도 그렇고 완전 안습이네요. 맥에서 보는 거랑 차원이.. 맥에서만 기본 폰트를 수정했더니만 다른 사람한테는 이렇게 안 보인다는 것을 망각하고 있었네요. 스타일 수정해서 폰트 좀 다른 걸로 바꿔야겠습니다. 네이버 폰트가 이쁘던데..


위에 꺼가 맥 버전


이게 윈도우 버전.. 네이버 폰트로 얼른 바꿔놔야겠습니다.

'잡담' 카테고리의 다른 글

good bye my poor vm image  (7) 2010.05.02
밤 늦은 시각 맥북과 함께  (3) 2010.01.05
눈처럼 내리는 똥  (2) 2010.01.04
IE에서 블로그 보니 안습이군요  (1) 2010.01.03
BEERWARE-BLOG  (4) 2009.11.28

  1. Mr.Pro

    | 2010.02.22 01:50 신고 | PERMALINK | EDIT | REPLY |

    아직 안바낀건 가용..?그대로인거 같은..느낌이 물씬 드네요..

Write your message and submit
« PREV : 1 : 2 : 3 : 4 : 5 : 6 : 7 : ··· : 10 : NEXT »