-
Ubuntu - Argus-clients, Shell Script - 우분투 Argus-client, 쉘 스크립트Security 2022. 5. 18. 17:54
Argus-clients 설치
IDS의 대표적인 오픈 소스 : Snort, Suricata, Argus IDS
Argus IDS의 본체는 네트워크 중간에 배치, Argus의 사용자 콘솔은 사무실에 설치
실습해보겠습니다.
wget http://qosient.com/argus/src/argus-clients-3.0.8.tar.gz
sudo apt install flex
sudo apt install bison
cd Downloads
sudo -i#root 권한으로 전환
cd /home/h/Downloads#여기서 두 번째의 h는 계정입니다. 보시는 분은 계정 이름을 넣어주시면 됩니다.
tar zxvf argus-clients-3.0.8.tar.gz
cd argus-clients-3.0.8
./configure#gcc가 없는 경우, apt install gcc해서 설치하면 됨, byacc도 없다고 하면 마찬가지로 설치
apt install make
make && make install
Argus (IDS) Log 분석
: 로그 분석을 통한 침해사고 분석, 호스트 행위 분석, 타겟 공격의 흐름 이해/지점 확인
분석 도구 - Argus (IDS) : 네트워크 보안 모니터링 도구, 세션기반 데이터 로깅- Suricata (IPS) : 오픈소스 IPS, 시그니처 기반 탐지(Snort 유사), DNS 로그 활용
ra (read argus data)를 이용한 데이터 읽기
ra --help#관련 도움말
cd ..#home/계정명/Downloads에서 진행
ra -nzr 1_merged_total.arg -s saddr,sport,daddr,dport#아주 많이 나옴
* BPF Filter 적용 *
: BPF (Berkeley Packet Filter) : 자연어(인간의 언어) 기반의 필터이며 awk 대신 사용하는 필터 도구입니다.
ra -nzr 1_merged_total.arg - "src host 192.168.1.122 and udp"#출발지 IP Address가 192.168.1.122이고 UDP인 패킷만 골라서 보기
DNS (Domain Name Service)
- 정방향 조회 : Domain Name을 입력하면 IP Address를 알려주는 것
- 역방향 조회 : IP Address를 입력하면 Domain Name을 알려주는 것
- DNS : Record
A : 정방향 조회 (IPv4 Address를 알려줌)
AAAA 또는 A6 : 정방향 조회 (IPv6 Address를 알려줌)
PTR (Pointer) : 역방향 조회
cname : 별칭
NS : Name Server의 준말
tail -10 2_dns.log
- 구분자 : [**]
- Query : Client(Web Browser)가 DNS Server에게 IP Address를 물어보는 것
- Response: DNS Server가 Client(Web Browser)에게 IP Address를 알려주는 것
- 3번째 Column이 Domain이고, 6번째 Column이 IP Address
- Response이면서, A로 표시된 것이 정방향 조회의 결과
구분자를 |로 만든 후, |를 제거할 예정입니다.
cat 2_dns.log | sed 's/\[\*\*\]\/|/g' | awk -F"|" '{print $3,$6}'
2번째 Column이 Response이고 4번째 Column이 A인 것만 골라서 추출합니다.
cat 2_dns.log | sed 's/\[\*\*\]/|/g' | awk -F"|" '$2~/Response/ && $4~"A"{print $3,$6}' | sort -u
- 구분자를 없애기 위해서 Pipe로 치환 : sed 's////g' (백슬래시 추가 : Escape)
- 파이프를 제거 awk -F"|"
- $2에서 Response를 골라내고
- &&는 AND의 의미
- $4에서 A를 골라냄
- $3이 Domain이고, $6이 IP Address이므로 화면에 출력합니다.
- / /는 사이의 문자를 포함하면
- " "는 사이의 문자와 같으면
실습 문제
1. 출발지가 192.168.1.0/24 이고 외부의 웹서비스 (443 or 80)에 접속한 로그만 골라서 web .log 파일로 저장
ra -nzr 1_merged_total.arg - "src net 192.168.1.0/24 and dst port (443 or 80) and tcp" > web.log
less web.log#읽기
2. TCP Port로 출발하는 IP 통계 구하기
ra -nzr 1_merged_total.arg -s saddr - "tcp" | sort | uniq -c | sort -rn
3. Upload가 많은 상위 10개의 출발지 IP 통계
ra -nzr 1_merged_total.arg -s sbyte,saddr - "tcp" | sort -rn | head -10
4. Upload가 많은 상위 10개의 출발지 IP 통계에 대한 awk group by sum
ra -nzr 1_merged_total.arg -s saddr, sbytes - "tcp" | sort -k 1,1 | awk 'ip==$1{sum=sum+$2;next}{print sum, ip; ip=$1; sum=$2}' | sort -rn | head
5. TCP를 사용하고 접속이 가장 많은 상위 10개의 IP Address 10개 출력
ra -nzr 1_merged_total.arg -s daddr - "tcp" | sort | uniq -c | sort -rn | head -10
6. Pipe를 치환하고 $2에는 Response가 포함되고, $4는 A인 Record들의 $3(Domain)과 $6(IP)를 중복 제거하고 dns.lookup으로 추출
cat 2_dns.log | sed 's/\[\*\*\]/|/g' | awk -F "|" '$2~/Response/ && $4~"A"{print $3, $6}' | sort -u > dns.lookup
less dns.lookup
7. TCP 통신하는 출발지 IP, 목적지 IP, 목적지 Port를 추출
ra -nzr 1_merged_total.arg -s saddr, daddr, stime, dport - "tcp" | awk '{print $1,$2,$4}' | sort | uniq -c | sort -rn > tcp_connection
less tcp_connection
tcp_connection 파일에서 내부망 (172.16.0.0/16, 192.168.0.0/16, 10.0.0./8) 대역 목적지 IP) 으로 이동하는 트래픽을 제외하고 Top 30 까지 통신 트래픽을 생성 후 dns.lookup 파일과 매칭하여 목적지 IP 에 대한 Domain 구하기
사설 IP만 골라내려면 : /^192.168.|^172.16.|^10./ //^은 ~~로 시작하는 의미
사설 IP가 아닌 것을 골라서 보려면: !~/^192.168.|^172.16.|^10./
tcp_connection에서 세 번째 Column이 목적지 주소 $3
$3에서 사설 ip가 아닌 것을 고르려면 $3!~/^192.168.|^172.16.|^10./
특수문자에 Escape 처리를 해줘야 함 $3!~/^192\.\168\.\|^172.16\.\|^10\.\/ // ^는 기능을 하지만 .은 기능을 하지 않기 때문에 Escape 처리
cat tcp_connection | awk '$3!~/^192\.\168\.|^172\.16\.|^10\./ {print $2,$3,$4}' | head -30 > top30
less top30
top30의 목적지 주소(dip)에 대한 도메인 주소(domain)를 dns.lookup에서 찾아서 dns_matched로 저장
cat top30 | while read line > do > dip=$(echo $line | awk '{print $2}') > domain=$(cat dns.lookup | awk -v ip=$dip 'ip==$2 {print $1}' | head -1) > echo $dip $domain #아래의 첫 번째 결과는 $dip, 두 번째 결과는 $line > done > dns_matched
less dns_matched
192.168.1.71 188.53.211.186 80 blinq.in 경로가 의심스러운 도메인
또 다른 사용자가 blinq.in에 접속했는지 확인
ra -nzr 1_merged_total.arg -s saddr,daddr - "dst host 188.53.211.186" | awk '{print $1}' | sort -u
위 두 개의 주소는 Windows일 것이므로 포렌식을 통해 피해 상태를 확인
'Security' 카테고리의 다른 글
Digital Forensic - 디지털 포렌식 (0) 2022.05.20 Forensic - 포렌식 (2) 2022.05.19 PCRE, awk, Shell Script, Log Check - 정규 표현식, awk, 쉘 스크립트, 로그 확인 (0) 2022.05.18 Ubuntu - Web Server (GNU Board), Web Firewall (Modsecurity) (0) 2022.05.17 DVWA - CSRF, Burp Suite - Dictionary Attack, Kali Linux -Medusa, Crunch - Brute Force (0) 2022.05.17