ி 설치
snort를 위한 라이브러리 설치
apt-get install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev
apt-get install -y libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev
apt-get install -y bison flex libdnet autoconf libtool
snort 설치
wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar -xvzf daq-2.0.7.tar.gz
cd daq-2.0.7
autoreconf -f -i
./configure && make && make install
wget https://www.snort.org/downloads/snort/snort-2.9.16.tar.gz
tar -xvzf snort-2.9.16.tar.gz
cd snort-2.9.16
./configure --enable-sourcefire && make && make install
ldconfig
snort 작동 확인
스니핑 모드 동작 확인
snort –v
snort 테스트 룰 생성
①
snort-2.9.16/rules/local.rules
위 파일을 생성한 후 아래 내용을 입력한다.
alert TCP any any -> any any (msg:test"; sid:0001;)
②
mkdir /var/log/snort
snort log 파일 저장을 위한 디렉토리를 생성한다.
③
snort -q -A console -c /root/snort-2.9.16/local.rules
만든 snort 룰을 콘솔에 띄워서 패킷 수신을 대기한다.
[snort 패킷 잡힌 사진]
ி 정보 수집 탐지
공격자가 nmap과 같은 프로그램으로 서버의 포트 정보를 수집하는 행위를
탐지하도록 룰을 만들어본다.
공격자(kali)
: 192.168.111.132
서버
: 192.168.111.134
nmap으로 포트 정보를 수집할 때 상대에게 한 번에 많은 패킷이 전달된다.
이때 패킷이 단시간 내에 많이 유입된 것을 판단하는
임계치
설정 법을 이용한다.
➽ 임계치(threshold) 설정 옵션
type
threshold : 매 m초 동안 s번째 이벤트마다 action 수행
both : 매 m초 동안 s번째 이벤트 시 한번 action 수행
track
by_dst : 수신자 ip 기준으로 추적한다.(N:1)
count/seconds : 횟수/시간
tcp half open scan
목적지 기준으로 SYN 패킷이 초당 100개 이상 발생 시 경고한다.
alert tcp any any -> 192.168.111.134 any (msg:"syn scan"; flags:S;
threshold:type both, track by_dst, count 100, seconds 1; sid:0001;)
type both인 경우 flags가 syn인 패킷에 대하여 1초동안 패킷이 100개 이상이 발생하면
한 번 로그를 발생시킨다.
type threshold는 1초당 100개 이상의 패킷이 들어오면 여러 번 로그가 발생될 수도 있다.
1초에 1000개가 들어왔다면 both는 한 번 이벤트를 발생하지만 threshold는 10번 발생시킨다.
type limit는 flags가 syn인 패킷을 1초에 최대 100개까지만 출력하겠다는 의미다.
즉 여기서 count는 패킷 개수를 나타내는게 아닌 로그 최대 출력 개수를 나타낸다.
[syn_scan 탐지 결과]위 룰은 사용자가 많은 시스템이라면 짧은 시간에 많은 SYN이 유입되어 정상적인 접속도 탐지되는 문제가 있다.
따라서 정상/비정상 패킷을 구분하려면 snort -v를 통한 스니핑 모드나
와이어샤크로 악성 패킷의 특징을 추출하여 추가로 패턴화 시켜야할 것이다.
예를들어 syn을 이용한 포트 스캔을 탐지하고 싶을 때
실제 syn 포트 스캔을 캡쳐한 패킷과 정상적인 접속 syn 패킷을 비교하여
비정상적인 부분을 검출하는 방법 정도를 생각해 볼 수 있다.
UDP port scan
UDP port scan의 특징은 닫힌 포트에 대해서 Destination unreachable(code=3)을
주기적으로 보낸다
alert icmp 192.168.111.134 any -> any any ( msg:"udp scan"; itype:3; icode:3;
threshold:type both, track by_dst, count 100, seconds 1; sid:0001;)
ICMP는 서버가 공격자에게 응답해준 패킷이므로 서버 IP 주소를 출발지에 입력한다.
UDP port scan 또한 syn_scan처럼 임계치 기반으로도 가능하긴 하나 오탐의 여지가 있다.
ி DDos 공격 탐지
DNS Query Flooding
출발지 기준으로 웹 접속시도(www)가 많다면 DNS query flooding으로 의심한다.
alert udp any any -> 192.168.111.134 53 (msg:"DNS query flooding"; content:"www"; nocase; threshold:type both, track by_src, count 100, seconds 1; sid:0001;)
nocase 옵션을 사용하면 대소문자를 구분하지 않는데 이 옵션을 쓰지 않으면
WwW와 같이 대소문자를 섞어서 flooding을 시도하는 패턴은 탐지하지 못할 것이다.
NTP Reflection
요청 대비 응답을 크게 하는 NTP의 MON_GETLIST 명령을 사용한 DOS 공격 기법이다.
MON_GETLIST에 해당하는 코드는 42번, 16진수로 변환하면 2a이다.
alert udp 192.168.111.134 123 -> any any (msg:"ntp"; content:"|2a|";
"threshold:type both, track by_dst, count 100, seconds 1; sid:0001;)
Smurf attack
응답을 모두 피해 서버가 받으므로 자원을 소모하는 서비스 거부 공격이다.
alert icmp 192.168.111.0/24 any -> 192.168.111.134 any (msg:"smurf"; icode:0; itype:0;
threshold: type both, track by_dst, count 100, seconds 1; sid:0001;)
출발지는 피해 서버가 속한 네트워크의 모든 호스트로 지정해야 한다.
Slowloris
alert tcp any any -> any any (msg:"slowloris"; content:"|47 45 54|";
content:!"|0d 0a 0d 0a|"; nocase; sid:0001;)
47 75 54는 문자열 "GET"의 HEX 값이다.
content:"|47 45 54|"; offset:0; depth:3;
➽ 첫 byte 부터 3byte 사이에서 content를 탐색한다.
ி MALWARE 분석 탐지
위 사진은 packettotal IDS에서 나온 악성 패킷 분석 결과인데
저 IDS와 유사한 방식으로 단순하게 룰 메시지를 출력해보도록 한다.
실습의 목적은 packettotal 분석 결과가 IDS 내부적으로 어떻게 해석되어
사용자에게 표현되는지 아는 것이다.
우선 멀웨어 샘플 패킷이 필요하므로 아래 사이트에서 예제를 다운받는다.
https://www.malware-traffic-analysis.net/2017/04/26/index.html
다른 곳에서 캡처한 패킷을 이용해서 내 컴퓨터로 다시 패킷을 재생하는 명령어는 아래와 같다.
# tcpreplay -i [인터페이스명] --topspeed [pcap 파일명]
topspeed 옵션을 넣으면 빠른 속도로 패킷을 재전송한다.
해당 옵션이 없는 경우 실제 이벤트가 일어난 시간만큼 기다려야 한다.
악성코드에 감염된 사이트로 redirection, 유포지 접속, 다운로드
# tcpreplay -i eth0 -topspeed malware_sample.pcap
1. alert tcp 185.189.14.112 80 -> any any (msg:"Keitaro TDS Redirect";
content:"/tds/"; sid:1000001;)
2. alert tcp any any -> 213.136.26.180 80 (msg:"TROJAN WS/JS Downloader";
content:"/administrator/templates/"; sid:1000002;)
3. alert tcp any any <> 213.136.26.180 80 (msg:"executable downloader";
content:".exe"; sid:1000003;)
C&C 서버와 통신
4. alert tcp any any <> 94.198.98.20 80 (msg:"Ransomware CnC Beacon";
content:"info-static.php"; sid:1000004;)
옵션을 상세하게 주지 않아서 결과가 중복되어 겹치는 부분도 있지만
어느정도 packettotal과 흡사하게 메시지가 표현되었다.
'해킹-보안' 카테고리의 다른 글
SNMP 보안 취약점 (0) | 2020.06.19 |
---|---|
Security Onion 설치하기 (0) | 2020.06.16 |
hping3 명령어 사용법 (1) | 2020.06.03 |
ARP spoofing 공격 실습 (0) | 2020.06.03 |
DDoS 패킷 분석 및 대응 방법 (0) | 2020.06.02 |