네트워크 스트림 패턴매칭 이야기 학술

네트워크 보안 장비를 우회할 때 쓸 수 있는 가장 쉽고 잘 통하는 방법은 암호화나 인코딩, 터널링으로 숨기는 것일테고, 간단히 데이터를 아주 잘게 쪼개서 보내는 방법(fragroute 참조)도 있다. 어쨌거나 암호화 해서 보내는 경우에는 중간에서 강제로 개입하지 않는 이상 (사용자나 응용 프로그램이 유효하지 않은 인증서를 보게 됨) 볼 수도 없고, 인코딩만 해도 시그니처는 우회할 수 있고, 이상한 패킷에 숨겨 터널링하면 사람 눈으로 일일이 뒤지고 다니지 않는 한 찾기도 힘들다.

데이터 쪼개서 우회하는 방법은 옛날이나 잘 먹혔던 방법일텐데 L4 헤더 수준까지 쪼개서 보내면 ACL 우회할 수 있는 경우도 예전에는 있었다고 한다. 이런 경우를 방지하려면 DPI(Deep Packet Inspection)를 수행하는 센서는 IP 재조립이나 TCP 재조립 열심히 잘 해줘야 하고, 여기까지는 대부분 잘 알고 있는 내용이다.

여기서 TCP 세그먼트 경계에서 끊어지지 않는 패턴 매칭을 하려면 세션 데이터를 통으로 들고 있어야 된다고 생각하는게 아마 일반적일 것이다. 스노트는 소스 제대로 안 뜯어봐서 모르겠지만 룰 자체가 content 매칭하고 pcre 스캔 다시 할 수 있게 되어 있으니 아마 일정 분량은 세션 데이터를 들고 있을거라고 생각하고, 와처 같은 경우에도 기껏 제로카피해서 들고 온 패킷을 L7 디코딩하면서 열심히 다시 메모리 복사질을 하고 있었다. 다른 센서들은 어떨지 모르겠으나 하여간 이런 경우에 무한정 세션 데이터를 들고 있을 수는 없고 어느 순간에는 플러시를 해야 되는데 그러면 완벽하게 경계 영역을 무시한 패턴 매칭이 된다고 보기 어렵다. 게다가 메모리도 많이 소모하고 복사로 인한 부하도 만만치 않을 것이다. UDP 트래픽 따위는 wire speed로 처리하다가도 http 부하가 심하게 들어갔다 하면 쓰루풋이 뚝뚝 떨어진다.

무식하게 비교하는게 아닌 이상 AC든 PCRE든 FSM을 만들어서 돌리고 있을테고, 그렇다고 한다면 굳이 세션 데이터를 누적해서 들고 있지 않고 마지막 상태만 기억하고 있어도 끊김없이 패턴 매칭을 이어나가는게 가능하다. 이런 방식을 지원하려면 섬세하게 상태를 관리하도록 구현된 L7 디코더가 필요하다. 말린 센서는 상대적으로 메모리를 훨씬 덜 쓰고도 같은 일을 할 수 있을 것이다.. 다른 아이디어들은 실제 적용이 된다면 언젠가.. DFA 최적화라든가 룰 다시 쓰기라든가..

이외에도 말린 센서는 바이너리 수준으로 PCAP 호환되어 전용 드라이버를 쓰거나 안 쓰거나 동일한 인터페이스를 가져가고 PCAP 파일에서 읽을 수도 있고 테스트 하기 쉽게 구현됐다. 한 줄 요약은 홈형이 짱이라는 것이다.. ㅋ

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://xeraph.com/tb/5193578 [도움말]

덧글

  • 홈쥬인 2010/02/07 20:57 # 답글

    하지만 조낸 느리잖아...? 아마 안될(...)
  • xeraph 2010/02/08 22:22 #

    뭐 세션 덤프 남기는 조건으로는 도무지 빠를 수가 없지 -_-;
  • 서린 2010/02/18 12:45 # 답글

    fragroute...는 2001년 사내 해커팀 스터디에서도 나왔었는데....

    뭔가 좀 참신한거 나온거 없나요?
  • xeraph 2010/02/18 12:54 #

    음 글쎄요 ipv6 버전 나온거 정도 밖엔 모르겠네요.
    http://code.google.com/p/fragroute-ipv6/
댓글 입력 영역