Skip to content

퍼징: 해커 입장에서 흥미로운 함수란?

March 13, 2012

버그 헌터들의 영원한 관심사, Fuzzing! Fuzzing을 할 때 해커들은 어떤 함수들을 좋아할까요? 간략하게 정리한 글입니다.

취약점 발견을 위해서 Fuzzing을 할 때, 어떤 함수가 해커에게 좋은 함수인지 판별해내는 것은 중요합니다. 함수 별로 처리를 해줘야 하는 경우가 많기 때문입니다. 예를 들어, 특정 함수의 인자나 스택 정보 등을 추출해내고 싶을 때가 그러한 경우 중에 하나입니다.

해커 입장에서 유용한 함수는, 해커가 해당 함수에 관여할 수 있는가 없는가로 구분할 수 있습니다. 여기서 말하는 관여란, 크게 2가지를 의미합니다.

  – 베이직 블락 플로우의 변화
  – 메모리 및 레지스터의 값 변조

메모리 코럽션류의 버그 헌팅 과정 중에서는, 위 조건을 만족하지 않는 함수는 해커에게 관심이 없는 함수라고 볼 수 있습니다. (레이스 컨디션이나 외부 리소스와 관련된 류의 버그는 제외합니다.)

위 2조건을 합쳐서 어떤 함수들이 해커의 관심을 끄는지, 기본적인 내용들을 알아보겠습니다.

  1. 함수에 데이터를 넘겨줄 수 있는가
   – argument 등으로 데이터를 넘기는 것이 가능한가
   – 특정 메모리 (user provided) 주소를 참고하는가

  2-1. 함수 내부에서 취약한 함수를 호출하고 있는가
   – sprintf, strcpy, strcat, memcpy 등

  2-2. loop 문을 포함하고 있는가 (루프 디텍션)
   – 반복 값이 동적인가
   – 정적의 경우 관심 제외: 상수, 정적, 고정 사이즈 (예: mov ecx, 0x8)
   – source 값이 동적인가

  2-3. integer overflow 가능성이 있는가
   – 예: ja/jb vs jg/jl
   – 비교 대상이 user provided 값인가

  2-4. 기타
   – 메모리 카피류의 인스트럭션을 포함하는가 (예: rep 등)

  3. 함수 진입이 가능한가? (Reachability)

위 조건들을 자동으로 판별해내고 데이터를 얻어낼 수 있다면 퍼징에 매우 효과적으로 사용할 수 있습니다.

루프 디텍션 등의 작업은 정적 분석으로도 비교적 쉽게 할 수 있고, 함수 인자에 대한 식별도 런타임의 힘을 빌리면 어렵지 않게 할 수 있습니다. 위 작업에서 힘든 점은 Reachability 체크와 user provided 데이터인지 아닌지 구분하는 것입니다.

Reachability 체크를 위한 가장 쉬운 방법은 모든 함수를 후킹하거나 브레이크 포인트를 건 후 플로우를 레코딩하는 것입니다. 레코딩 된 정보는 데이터베이스화하여 사용할 수 있습니다.

그러나 조건이 맞아야만 플로우가 분기되는 경우도 있기 때문에 보다 정확하게 판별하기 위해서는 taint analysis와 symbolic execution 등을 활용해야 합니다. User conrtrollable 데이터인지 아닌지 마킹하는 것은 중요한 일이지만 이를 위해서는 “개발 비용 및 속도”라는 트레이드 오프를 감수해야 한다는 얘기죠.

위에서 언급한 조건들은 기본적인 내용들이고 간단해 보이지만 완벽하게 구현하기는 무척 어렵습니다. 어디까지 구현을 하고 버그 헌팅을 할 것인지 결정하는 것은 버그 헌터의 몫입니다.

여담이지만, 해커들 사이에서도 dummy fuzzing 파와 그렇지 않은 파로 나뉘는데 dummy fuzzing을 하는 해커들이 꼭 기술적으로 떨어지는 것은 아닙니다.

이 친구들은 버그를 찾는 것 자체가 목적이지, 학문이나 기술적인 진보가 목적이 아니기 때문에 자신의 상황이나 비지니스에 맞는 방향을 선택합니다.

tainting 등을 활용하여 advanced fuzzing을 하다가 결국엔 몇만 달러의 자금을 투자해 하드웨어를 산 후 dummy fuzzing을 하는 친구들도 있죠. 버그를 발견해서 번 금액은 다시 하드웨어에 재투자해 scalable한 fuzzing을 주도하고, 또 대상 소프트웨어에 따라 빠르게 fuzzing을 하는 것이 이 친구들의 전략입니다.

 
[레퍼런스]

1. Halvar Flake: “More fun with Graphs” – http://www.blackhat.com/presentations/bh-federal-03/bh-fed-03-halvar.pdf
2. Bitblaze – http://bitblaze.cs.berkeley.edu/

Advertisements

From → Security Misc

4 Comments
  1. 죄송하지만 beist.org 는 어디 간 것인가요?
    여기 있나요?

  2. 삼사군 permalink

    헤헤.. 좋은 말씀 잘 듣고가요 ^-^

댓글을 남겨주세요.

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: