[완료]c언어에서 패턴 매칭....도대체 어떻게 해야 할까요>??
글쓴이: mixmccym / 작성시간: 화, 2008/06/24 - 5:35오후
현재 리눅스상에서 LIBIPQ를 사용하여 sql-injection 공격 탐지 및 차단 프로그램을 구현하고 있습니다.
방식은 퍼올린 패킷과 제가 미리 set해놓은 공격패턴을 매칭해서 탐지하고 싶은데요
공격패턴은 snort에서 포함되어있는 룰을 그대로 가져와서 적용시키려고 합니다.
그런데 예를 들어 제가 외부에 파일형태로 rule을 기술해 놓고
제가 만든 프로그램에서 그것을 읽어오고 매칭을 하고 싶은데
문제는 rule이 단순히 몇글자 이렇게 있는게 아니라 상당히 긴것이 문제입니다.
이렇게 한두 문장이 아니라 여러줄의 패턴을 올려놓고 실제 들어오는 패킷과 매칭을 하려면 어떠한 방법을 택해야 할까요?
아이디어도 좋고 실제 구현 방법을 가르쳐주셔도 좋습니다.
저의 고민을 해결해주실 분 안계신가요?
Forums:
1. 룰 인식 1-1.
1. 룰 인식
1-1. 모든(ALL) 스노트의 룰을 그대로 사용하고자 한다면,
먼저 룰 파서를 만들어야 할 것입니다. 그런데, 스노트가 체계적인 설계로 만들어진것이 아니고, 특정 필요에 따라 확장이 되었기 때문에 룰이 좀... 모호(ambiguous)합니다. 8192바이트이던가?하는 제한도 있었던것 같고....
1-2. 스노트의 룰 중에서, SQL 인젝션관련만을 처리하고자 한다면,
해당 룰을 본인이 정의한 형태로 변환(import기능)하는 것이 편리할 것입니다. 룰들을 잘~ 정리하다 보면 공통점등을 찾을 수도 있고, 이는 매칭트리 등을 구성하는데, 훌륭한 정보로 사용될 수 있습니다. 예를들어, 동일한 패턴이 룰 10개에 걸쳐 나타난다면, 10번 비교할것을 1번에 끝낼수도 있다는...
2. 매칭구조
룰 매칭트리를 만들어야 할것이고, 일단, 순차적인 비교도 나쁘지 않겠지요.
스노트는 3차원 룰 매칭 구조를 가지고 있었던 것으로 기억합니다.(룰 순회 구조랄까요?)
3. 스트링비교
일단, 이러한 구조를 확립하고 나면, 문자열 비교 알고리즘이 필요한데, 스노트는 Boyer-Moore알고리즘 등, 몇가지 문자열 비교 알고리즘을 제공하는 것으로 알고있습니다. 이러한 알고리즘을 참조하는 것도 방법이겠습니다.
4. 이벤트 생성 및 대응처리
차단을 하고 로깅하던지, 단순 로깅하던지를 결정하시면 될 듯합니다.
* 프로토콜 처리루틴 및 자료구조: 매칭 트리로 웹트래픽 데이터를 입력하기 전에, IP프래그먼트처리 및 TCP 세션재조립등을 처리해야 할 것이며, 동시 처리할 최대 세션 및 데이터 크기에 대해서도 정의해야 할 것 입니다. 결국, 만들다 보면 준...스노트처럼 되겠군요.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
정규표현식을
정규표현식을 사용해서 Pattern matching을 구현하셔도 될듯한데요.
libpcre를 사용해 보시면 어떨까 싶네요.
時日也放聲大哭
時日也放聲大哭
댓글 달기