STUDY.md
  • (Ubuntu) FWSnort 리눅스에 설치하고 탐지/차단식 전환하기
    2024년 06월 27일 15시 00분 27초에 업로드 된 글입니다.
    작성자: 방세연

     

     

     

    FWSnort란?

     

    IDS(Snort)와 IPS(IPtalbes)를 결합해 스노트 탐지식을 IPTables 방화벽에서 적용하는 기능을 사용할 수 있다.

     

     

    FWSnort 도구에 대한 자세한 설명

    https://www.cipherdyne.org/fwsnort/

     

    fwsnort - iptables Intrusion Detection with String Matching and Snort Rules

    Michael Rash, Security Researcher

    www.cipherdyne.org

     

     

    ✒️ 1.설치 과정 

    설치를 위해서는 snort가 설치되어 있는 상태여야 한다.

     

     

    cat /etc/snort/rules/local.rules

    해당 명령어를 통해 snort rules에 나타나있는 sid:1341을 확인할 수 있다.
    이를 FWSnort 설치를 통해 차단식으로 변환할 수 있을까?

     

    vi /etc/snort/snort.conf

     

    FWSnort 설치를 위해서는 명령어를 통해 snort.conf RULE_PATH의 모든 부분의 주석을 해제 해줘야 한다.

     


    다음과 같이 Step #7, Step #8, Step #9의 모든 부분을 주석 해제한다.

     

     

     

    cat /etc/snort/snort.conf -n | grep "include $RULE_PATH"

    snort.conf에서 "RULE_PATH"의 내용을 확인해 주석이 해제되었는지 확인한다.

    모든 주석 include ~ 에 # 표시가 없는 상태여야 한다.

     

    apt-get install fwsnort

    fwsnort를 설치한다.

     

    설치가 완료되었다는 문구를 확인하기 위해서는 fwsnort -h 명령어를 입력한다.
    fwsnort의 버전이 v1.6.8이라는 것을 확인할 수 있다.

     


     

    cat /etc/fwsnort/fwsnort.conf -n

     

     

    fwsnort.conf 파일에서 가장 중요한 부분은 ### fwsnort filesystem paths (파일 시스템 경로) 부분이다.

    log 파일, conf 파일, Rules dir 파일이 연결되고있는 경로 현황을 확인할 수 있다.

     

     


     

    ✒️ 2. FWSnort에 Snort 기본 탐지식 복사하기 

    이제 Snort 규칙을 전환하기 위해 Snort 기본 탐지식을 FWSnort로 복사해주겠다.

     

    cp /etc/snort/rules/* /etc/fwsnort/snort_rules

     

     


    참고로 snort의 rules 디렉토리에 있는 rules 파일들은 다음과 같다.
    이 주석 해제한 rules를 모두 복사해서, fwsnort에서 전환하는 작업을 바로 뒤에 실행한다.

     

     

     

    fwsnort

     

    이제야 fwsnort 도구를 작동해주는 명령어를 사용할 수 있겠다. 내용을 확인해보면 총 3680개의 탐지식 중 1794개만 전환에 성공했다는 것을 알게 되었다. 즉, 모든 규칙이 전환에 성공하는 것은 아니라는 점을 파악할 필요가 있다.

     

    /var/lib/fwsnort/fwsnort.sh

     

    해당 명령어를 통해 iptables 방화벽에서도 전환한 차단식을 사용할 수 있도록 해주는 작업까지 완료해 전환을 마무리해준다.

     

    그렇다면 내가 찾던 특정 rules가 FWSnort 전환에 성공했는지 알 수 있는 방법은 무엇일까?

     

     

     


    ✒️ 3. 전환된 규칙을 FWSnort에서 확인하기 

     

    cat /var/lib/fwsnort/fwsnort_iptcmds.sh | more

     

    fwsnort_iptcmds.sh 파일에서 전환된 모든 탐지식의 규칙을 확인해볼 수 있다.

    하지만 내용이 굉장히 방대하다. 스크롤을 내려도 끝이 없을 것이다.

     

     

    cat /var/lib/fwsnort/fwsnort_iptcmds.sh | egrep " "

    해당 egrep 명령어를 통해 특정 부분을 검색할 수 있다.
    sid:1341이 차단식으로 전환되었는지 확인할 수 있을까? 궁금해 해당 내용을 검색해보았다.
    다음 내용은 sid:1341에 대한 규칙에 대한 것이다.


    fwsnort를 통해 자동으로 전환된 규칙 정보
    역할: /usr/bin/gcc 명령어 시도를 감지하는 웹 애플리케이션 공격 탐지
    서명 ID: sid:1341
    FWSnort 변환: Snort 서명을 IPTables 규칙으로 변환하여 방화벽 규칙으로 활용
    적용: 웹 애플리케이션 공격으로 간주되는 활동에 대한 감지 및 로깅



     

     

     

    SID:1341 구조 자세히 확인해보기

    더보기

     1.Snort 서명 (sid:1341)

    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"WEB-ATTACKS /usr/bin/gcc command attempt"; flow:to_server,established; content:"/usr/bin/gcc"; nocase; classtype:web-application-attack; sid:1341; rev:5;)

    snort 서명에 대한 부분이다. 외부 네트워크에서 HTTP 서버로 향하는 트래픽에서 /usr/bin/gcc 명령어를 포함하는 내용을 감지하려고 한다는 점을 알 수 있었다.

    • 동작 (alert): 패킷이 일치할 때 경고를 생성.
    • 프로토콜 (tcp): TCP 트래픽을 분석.
    • 출발지 IP ($EXTERNAL_NET): 외부 네트워크의 IP.
    • 출발지 포트 (any): 모든 포트.
    • 목적지 IP ($HOME_NET): 내부 네트워크의 IP.
    • 목적지 포트 (80): HTTP 트래픽.
    • 옵션: 트래픽 분석 및 경고 메시지 포함.

     

    2. FWSnort 규칙

    $IPTABLES -A FWSNORT_FORWARD_ESTAB -p tcp -m tcp --dport 80 -m string --hex-string "|2f7573722f62696e2f676363|" --algo bm --icase -m comment --comment "sid:1341; msg:WEB-ATTACKS /usr/bin/gcc command attempt; classtype:web-application-attack; rev:5; FWS:1:6.8;" -j LOG --log-ip-options --log-tcp-options --log-prefix "[850] SID1341 ESTAB "

    FWSnort 규칙에 대한 부분이다. Hex로 표현된 /usr/bin/gcc 문자열 매칭과 web-application-attack 주석 표현, TCP 프로토콜 및 포트 80(HTTP)를 필터링한다는 내용을 확인할 수 있다.

     

    • -A FWSNORT_FORWARD_ESTAB: 체인 이름.
    • -p tcp -m tcp --dport 80: TCP 프로토콜 및 포트 80 (HTTP) 필터링.
    • -m string --hex-string "|2f7573722f62696e2f676363|": 문자열 매칭 (hex로 표현된 /usr/bin/gcc).
    • --algo bm --icase: Boyer-Moore 알고리즘을 사용하여 대소문자 구분 없이 문자열 매칭.
    • -m comment --comment "sid:1341; msg:WEB-ATTACKS /usr/bin/gcc command attempt; classtype:web-application-attack; rev:5; FWS:1:6.8;": 주석 추가.
    • -j LOG --log-ip-options --log-tcp-options --log-prefix "[850] SID1341 ESTAB ": 일치할 경우 로그에 기록.

     

     

    3. IPTables 규칙

    $IPTABLES -A FWSNORT_INPUT_ESTAB -p tcp -m tcp --dport 80 -m string --hex-string "|2f7573722f62696e2f676363|" --algo bm --icase -m comment --comment "sid:1341; msg:WEB-ATTACKS /usr/bin/gcc command attempt; classtype:web-application-attack; rev:5; FWS:1:6.8;" -j LOG --log-ip-options --log-tcp-options --log-prefix "[728] SID1341 ESTAB "

    IPTables 규칙에 관련된 부분이다. 이 규칙 또한 FWSnort 규칙 부분과 구성이 비슷하며 /usr/bin/gcc를 탐지한다는 점을 알 수 있었다.

     

     

     


    ✒️4. 수동으로 iptables에 차단 규칙 추가해주기 

     

     

    1. 로깅/탐지 규칙
    iptables -A FWSNORT_INPUT_ESTAB -p tcp -m tcp --dport 139 -m string --hex-string "|780070005f007000720069006e007400730074006100740065006d0065006e0074007300|" --algo bm --from 96 --icase -m comment --comment "sid:690; msg:MS-SQL/SMB xp_printstatements possible buffer overflow; classtype:attempted-user; reference:bugtraq,2041; rev:9; FWS:1.6.5;" -j LOG --log-ip-options --log-tcp-options --log-prefix "[658] SID690 ESTAB "
    2. 차단 규칙
    iptables -A FWSNORT_INPUT_ESTAB -p tcp -m tcp --dport 139 -m string --hex-string "|780070005f007000720069006e007400730074006100740065006d0065006e0074007300|" --algo bm --from 96 --icase -m comment --comment "sid:690; msg:MS-SQL/SMB xp_printstatements possible buffer overflow; classtype:attempted-user; reference:bugtraq,2041; rev:9; FWS:1.6.5;" -j REJECT

     

     

    물론 필요한 규칙을 발견하지 못했거나 추가적인 부분을 설정해주고 싶다면 수동으로 설정해주는 방법도 있다.

     

    1. 로깅/탐지 규칙

           다음의 첫 번째 식은 sid:690을 iptables 방화벽에 수동으로 식을 설정해준 결과이다. 먼저 탐지할 수 있는 규칙을 작성해주었다. 구조는 xp_printstatements에서 발생할 수 있는 버퍼 오버플로우에 대한 메시지를 적어주고, TCP 프로토콜을 필터링한다는 내용과 hex로 표현된 xp_printstatements 값을 적어준 것이다. 시드 690이 MS-SQL/SMB에서 발생할 수 있다는 점을 주석을 통해 표현해주었다. 마지막으로 -j LOG ~ 내용을 통해 로깅을 해준다는 내용을 명시하였다.

     

    2. 차단 규칙

           두 번째 식에는 시드 690에서 공격이 발생했을 때 이를 차단할 수 있는 규칙을 적어주었다. 이는 첫 번째 규칙과 거의 동일하지만 -j REJECT라는 명령어를 통해 탐지된 일치하는 패킷을 거부(차단)한다는 내용을 명시해주었다.

     

     

     

    iptables --list

    iptables --list 명령어를 통해 iptables에 직접 추가해준 탐지/차단식이 규칙에 추가되었는지 확인해준다.

    LOG, REJECT 부분에 해당 내용이 있음을 확인하였다.

     

    규칙을 설정해줬으니 이제 다음 게시글에서는 가상머신에 공격을 진행해보려고 한다.

    과연 차단이 잘 될까?

     

     

     

     

     


     

    실습 참고 도서

    https://www.yes24.com/Product/Goods/60742058

     

    우분투 리눅스 기반의 IDS/IPS 설치와 운영 - 예스24

    사이버 보안인들에게 익숙한 우분투 운영체제에 기반해 IDS/IPS 장비의 기반을 이루는 스노트와 IPTables 전반을 설명한다. 이 책은 단순히 저자의 지식 경험을 전달하는 내용이 아니다. 그동안 국

    www.yes24.com

     

     

    댓글