https://arxiv.org/pdf/2001.09592.pdf

주의

지극히 개인적인 의견만 들어가 있습니다. (본인도 뭘 썼는지 모르겠음)

Problem Statement

네트워크 프로토콜을 하는데에는 많은 어려움이 있다. 첫째, 네트워크 프로토콜은 사이즈가 크고 복잡하다. 둘째, 테스트와 검증을 통해 에러를 얻는데까지 걸리는 시간이 길다. 셋째, 실제 환경에서 테스트하는 것과 가상의 환경에서 테스트 하는 것과 상황이 다르다.
네트워크 프로토콜을 퍼징하는데 많은 시도가 있었다. 퍼징만 사용하여 네트워크를 테스트하거나 symbolic execution만을 사용하여 네트워크를 테스트하려는 시도들이 있었지만 low coverage 문제나 path explosion 문제가 있었다. 따라서 둘을 섞어 네트워크를 퍼징하려 한다.

Summary

FuSeBMC는 퍼징만으로 탐색하기 어려웠던 부분들을 symbolic execution과 BMC(Bounded Model Checking) 엔진으로 해결한다. 총 다섯단계로 퍼징이 진행되는데, 아래와 같다.

  1. Protocol specification analyzer가 concrete packet을 만든다.
  2. AFL을 통해 테스트 케이스를 생성한다. 그 뒤 function coverage를 측정한다.
  3. 너무 많은 경로들을 지나면서 해당 경로들이 code coverage를 늘린다면 (i.e invalid packet) 이들을 symbolic packet으로 마킹한다.
  4. Path-based symbolic execution과 BMC를 통해 path들을 개척한다.
  5. Concrete packet에 symbol 들을 붙여서 symbolic packet으로 바꾼다.

아래 두 기준을 이용하여 퍼저를 평가하였다.

  1. Protocol specification에 대해 버그를 찾는 능력
  2. 버그를 찾기까지 걸리는 시간

또한, 실험적 목표는 아래와 같다.

  1. EG1 (취약점 감지) : Real-world network protocol 구현들에서 취약점을 찾을 수 있는가
  2. EG2 (witness validation) : 감지된 취약점에서 좀 더 많은 정보를 얻을 수 있는가 (취약점에 대한 정보)

ESBMC, KLEE, Map2Check, SPIKE를 간단한 FTP 서버에 적용시킨 뒤 실험한 결과 ESBMC만 EG1을 달성할 수 있었다. 또한 ESBMC를 적용하였을 때 bad state까지 도달하는 경로를 얻을 수 있었고, 이는 EG2를 달성한 것과 동치이다.

Strengths

퍼징과 Symbolic execution의 한계를 깨며, 단시간에 취약점을 찾을 수 있다는 것에서 장점을 보이고 있다.

Weaknesses

아래와 같은 부분이 애매하거나 잘 서술되어 있지 않다.

  1. Protocol specification을 어떻게 읽었는지
  2. Fuzzing exploration 전략이 무엇인지
  3. Concrete packet, symbolic packet의 정의가 무엇인지
  4. Symbolic marking의 과정이 무엇인지
  5. Coverage를 측정하기 위한 instrumentation 방법은 무엇인지 (AFL을 사용했다고 서술되어 있지만 정확하지 않다)
  6. Symbolic execution을 어떤 방식으로 수행했으며, input validation을 어떤 프레임워크로 수행했는지
  7. Driller와 차이가 무엇인지
  8. 네트워크 프로토콜에서 symbolic execution과 기존 퍼징 방법을 섞어야 되는 이유가 정확히 무엇인지 (프로토콜의 특성이 사유가 될 수 있는지)

또한 평가 방법에도 문제가 많다.

  1. FTP 서버에 대해 퍼징을 수행했는데 다른 퍼저들은 얼마나 빨리 취약점을 찾는지
  2. 테스트를 몇회 수행했는지 (시드 생성 등에 랜덤한 요소가 있기 때문에)
  3. FTP 서버와 서버를 하나 새롭게 만들어서 테스트를 수행했는데 이렇게 했을 때 리얼월드에서 평가를 진행했다고 할 수 있는지

Further Discussions

네트워크 프로토콜의 특성에 따른 퍼징 기법으로 무엇이 적절할지 더 논의가 필요해 보인다. 또한, 리얼월드에 가까운 방법으로 퍼저를 평가할 수 있는 방법이 무엇일지도 논의가 필요해 보인다.

+ Recent posts