2015년 11월 30일 월요일

Snort 분석(WEB-MISC Checkpoint Firewall-1 HTTP parsing format string vulnerability attempt - 3rd)

지난 글에 이어서 룰 개선을 시도해보자.

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS 
(msg:"WEB-MISC Checkpoint Firewall-1 HTTP parsing format string vulnerability attempt"; 
flow:to_server,established; 
content:"|3A|/"; offset:11; http_uri; 
pcre:"/^[^\x3a\x3f]{11,}(?<!resource|http|https)\x3a\x2f/Usmi";
  • 부정형 후방탐색을 이용해서 'resource, http, https'로 시작하지 않는 '3A2F' 패턴만 탐지
  • 부정형 전/후방탐색을 혼용해서 'resource'로 시작하지 않고, '2F(/)'로 끝나지 않는 '3A2F' 패턴만 탐지하는 '(?<!resource)\x3a\x2f(?!\x2f)' 표현식도 가능
metadata:service http; reference:bugtraq,9581; reference:cve,2004-0039; reference:nessus,12084; classtype:attempted-admin; sid:2381; rev:14;)

2015년 11월 27일 금요일

Snort 분석(WEB-MISC Checkpoint Firewall-1 HTTP parsing format string vulnerability attempt - 2nd)

지난 글에 이어서 이제 본격적으로 탐지로그의 정오탐 여부를 확인해보자. 해당 탐지로그의 URL 영역만을 추출한 후, 정규표현식 '^[^:?]\{-11,}:\/'로 검색을 해봤다. 어라? 탐지패턴이 없는 로그가 있다. 그런데 가만 보니 아예 없는 건 아니고, URL 인코딩된 '%3A(:)' 패턴 때문에 검색식과 일치하지 않을 뿐이다.


2015년 11월 24일 화요일

Snort 분석(WEB-MISC Checkpoint Firewall-1 HTTP parsing format string vulnerability attempt)

오늘 살펴볼 Snort 룰은 다음과 같다.

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS 
(msg:"WEB-MISC Checkpoint Firewall-1 HTTP parsing format string vulnerability attempt"; 
flow:to_server,established; 
content:"|3A|/"; offset:11; http_uri; 
  • URI 영역의 시작점부터 11byte 이후, '3A(:)' 패턴이 존재하는 패킷 중
pcre:"/^[^\x3a\x3f]{11,}\x3a\x2f/Usmi"; 
  • URI 영역의 시작점에서 '3A(:)' 또는 '3F(?)'를 제외한 패턴이 11개 이상 나열된 이후, '3A2F(:/)' 패턴이 존재하면 탐지 
  • content 옵션으로 한 번 걸렀으며, 왼쪽에서 오른쪽을 검사를 시도하다 일치하는 패턴이 나타나면 중지하는 패턴매칭 원리에 의해 수정자 'U(URI)'는 없어도 무방
  • 메타문자 '.'을 사용하지 않았는데 수정자 's'를 왜 사용하는지 모르겠음
  • 수정자 'm'은 앵커문자 '^(첫 번째 줄 검사)'나 '$(마지막 줄 검사)'의 줄 구분 해제 
metadata:service http; reference:bugtraq,9581; reference:cve,2004-0039; reference:nessus,12084; classtype:attempted-admin; sid:2381; rev:14;)

2015년 11월 18일 수요일

강의를 반기는 이유

책을 쓰고 나서 가끔 강의 요청을 받는다. 처음엔 좀 무서웠다. 원래 내향적인 편이기도 하고, 학교 다닐 때 발표같은 것도 싫어했다. 말이 많은 편도, 잘 하는 편도 아니어서 사람들 앞에서 뭔가를 떠들어야 되는 상황이 낯설었다. 그런데 점점 그런 상황을 반기고 있는 나를 보게 된다.

일단 책을 쓴 이유는 말을 하고 싶어서였다. 현업에서 잘 들어주지 않는 말, 하기 힘든 말, 할 기회가 없었던 말을 하고 싶었다. 말주변은 없고, 말은 하고 싶고, 그래서 책을 썼나 보다.

하고 싶은 말을 다 하고 나면, 책을 쓰고 나면 속이 좀 후련해지지 않을까? 그런데 책을 쓰고 나서 말을 하고 싶다는 욕망이 오히려 더 커져버렸음을 느낀다. 책을 통한 간접적인 소통보다 직접 만나 눈을 마주치면서 내 생각을 얘기하고 상대방의 생각도 들어보고 싶어진 것.

그래서 강의 요청을 받을 때가 가장 기쁘다. 피드백을 받을 수 있기 때문. 그리고 그 피드백을 통해 나의 부족한 부분을 찾게 되고, 내가 생각했던 문제가 나만의 문제인지 공통의 문제인지에 대해 다시 한 번 생각해볼 수 있는 기회를 갖게 된다. 물론 돈도 벌고^^;

2015년 11월 8일 일요일

인튜이션

대니얼 카너먼의 '생각에 관한 생각'이 직관의 과신으로 인한 지나친 낙관주의를 경계했다면, 게리 클라인의 '인튜이션'은 경험에 기반한 직관의 힘을 옹호한다. (전문지식도 강조하는데 경험이 반복되면 전문지식 아닌가?)

두 책이 때로는 상대방을 부정하고 때로는 인정하면서 서로의 의견을 피력해나가는 부분이 꽤 재미짐.

클라인은 '긴급한 상황에서 사람은 어떻게 의사결정을 하는가' 라는 정부 과제를 수행하는 과정에서 소방관, 간호사, 군인 등 여러 직군의 다양한 긴급상황 대처 사례를 수집하고 분석했다고 한다.

그리고 그 연구 결과 직관의 비법은 충분한 경험이며, 직관을 배제한 체 합리적 분석에만 의존하는 의사결정은 합리적∙논리적 근거를 찾아 헤매다 결국 이러지도 저러지도 못하는 상황에 처하게 될 수 있다고 경고한다.

2015년 11월 1일 일요일

어떻게 책을 쓸 수 있었을까?

책을 쓰기 전에 궁금한 게 하나 있었다. 왜 비슷한 주제의 책이 없을까? 왜 나와 비슷하게 일하는 사람을 볼 수가 없을까? 왜 데이터베이스에 고스란히 쌓여있는 로그를 외면한 채, 힘들게 하나씩 클릭해서 보고 있을까?

물론 내가 모든 보안관제 현장을 다 둘러본 적이 없으니 장담할 수는 없는 노릇이다. 하지만 최소한 내가 보고 경험한 바로는 그랬다. 나는 뭐가 달랐을까? 좀 재수없지만(..) 내가 생각한 이유들을 정리해봤다.

1. 웹과 데이터베이스를 연동해본 경험 덕에, HTML과 ASP 코딩 정도를 해본 덕에 웹과 데이터베이스의 동작 구조에 대한 이해가 있었으며, 덕분에 웹을 향한 또는 웹을 통한 공격을 이해하기 쉬웠다.

2. 리눅스와 VIM을 써본 덕에 로그 가공 및 분석에 나름 익숙했고, 데이터베이스를 이용한 데이터 조회 및 통계 분석 경험을 가지고 있었다.
  • 덕분에 보안장비의 불편한 로그 분석 기능에 짜증(?)을 낼 수 있었고, 보안장비 로그를 저장하는 데이터베이스만 있으면 얼마든지 로그를 꺼내서 마음대로 지지고 볶을 수 있었다.

크리에이티브 커먼즈 라이선스