일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- AWS
- 와이어샤크
- 파일시그니처
- Burp Suite
- 네이버클라우드
- 로그분석
- 로드밸런서
- 개인정보보호법
- RDS
- 보안컨설팅
- 정보보안
- 클라우드 자격증
- ncp
- metasploit
- azure
- 클라우드자격증
- mysql
- AWS SAA
- 클라우드서비스
- Iam
- 공개키
- AWS SSA
- 클라우드보안
- 클라우드
- isms
- ISMS-P
- 취약점
- 정보보호
- EC2
- 인스턴스
- Today
- Total
처음 만나는 클라우드 보안
Argus로그를 이용한 침해사고분석 본문
이번 포스팅에선 Argus에 대해 알아보고 관련 로그를 통해 감염된 PC를 찾아본다.
Argus란?
: 대표적인 오픈소스 IDS 중 하나로서 네트워크 보안 모니터링 도구 및 세션 기반 데이터 로깅에 사용된다.
세팅: Argus IDS의 본체는 네트워크 중간에 배치, Argus 콘솔은 사무실에 배치 => Argus IDS Client 설치
1. Argus로그 분석 기초
ra (read argus data)를 이용한 데이터 읽기 => 누가 공격자인지 알아내기 위함
$ ra -r file1 file2
$ ra -r s file1
-s(옵션) 주요 필드명
- stime: 시작시간
- ltime: 종료시간
- sbytes: src ->dst (아웃바운드;유출)
- dbytes: dst ->src (인바운드;유입)
- saddr: 출발지 IP
- dport: 목적지 Port
- daddr: 목적지 IP
- dport: 목적지 Port
ra -nzr 형태로 자주쓰인다. (-n: 알려진 포트도 숫자로 표현, z: 상세 내용 보기)
ra -nzr 1_merged_total.arg -s saddr,sport,daddr,dport // 아래 출력 값
BPF (Berkeley Packet Filter)
: 버클리 대학에서 만든 자연어 기반 패킷 필터, 인간의 언어 순서와 매우 유사한 입력이 가능하다.
DNS로그 분석 기본
- DNS (Domain name service)란?
Domain Name을 입력하면 IP주소를 알려주는 것
역방향 조회: IP주소를 입력하면 Domain Name을 알려준다.
- DNS Record
A: 정방향 조회 (IPv4 주소를 알려줌)
AAAA 또는 A6: 정방향 조회 (IPv6 주소를 알려준다.)
PTR (Pointer): 역방향 조회 ex) nslookup의 ns -> name server
- DNS로그 열람 예시
구분자 : [**]
Query : Client(웹브라우저)가 DNS Server에게 IP주소를 물어보다
Response: DNS Server가 lient(웹 브라우저)에게 IP주소를 알려주는 것
# tail -10 2_dns.log
위 결과 중 Response이면서, A(정방향 조회)인 결과 : 도메인은 세 번째 칼럼, IP주소는 여섯 번째에 위치해있다.
- DNS 로그 추출
# cat 2_dns.log | sed 's/\[\*\*\]/|/g' | awk -F"|" '{print $3,$6}'
// 구분자 | 로 만든 후, | 제거 예정 (바로 null값으로 치환은 불가함)
# cat 2_dns.log | sed 's/\[\*\*\]/|/g' | awk -F"|" '$2~/Response/ && $4~ "A" {print $3, $6}' | sort -u
// 구분자를 없애기 위한 sed문 사용 's/[**]/|/g' (후에 \추가하여 Escape)
// 파이프 제거 awk -F"|"
// $2가 Response를 골라내고 AND $4에서 A를 골라냄
2. Argus IDS 로그분석
해킹당한 내부 서버의 Argus 로그 데이터를 분석하여 감염된 PC를 찾는다.
1) 192.168.1.0/24(내부망)에서 Web Server에 접속한 로그 선별 후 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
2) 1번 결과에서 중복 제거하여 재저장
# ra -nzr 1_merged_total.arg - "src net 192.168.1.0/24 and dst port (443 or 80) and tcp" | uniq -c > web.log
3) tcp포트로 출발하는 IP통계 확인
ra -nzr 1_merged_total.arg -s saddr - "tcp" | sort |uniq -c | sort -rn
4) 3번 결과에서 상휘 10개의 목적지 IP통계 구하기
ra -nzr 1_merged_total.arg -s daddr - "tcp" | sort |uniq -c | sort -rn | head -10
4-1) TCP 업로드가 가장 많은 상위 10개의 출발지 IP
ra -nzr 1_merged_total.arg -s sbytes, saddr - "tcp" | sort -rn | head -10
5) 업로드의 양을 IP별로 합산해서 상위 10개를 출력
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 (sort -k 1,1?)
6) tcp 통신하는 출발지 IP, 목적지 IP, 목적지 PORT 추출
ra -nzr 1_merged_total.arg -s saddr, dport, daddr - "tcp" | sort | uniq -c | sort -rn | awk '{print $1 "\t" $2 "\t" $ "\t" $3}' | head
\t : 일정한 간격을 위한 탭
7) 2_dns.log파일에서 구분자([**])를 파이프'|'로 치환하고 $2에서 Response로 시작하며 $가 A인 것들을 골라 $3만 $6만 추출하여 dns.lookup으로 저장
cat 2_dns.log | sed 's/\[\*\*\]/|/g' | awk -F "|" '$2~/Response/ && $4~"A"{print $3, $6}' | sort -u > dns.lookup
8) tcp_connection파일에서 내부망(172.16.0.0/16, 192.168.0.0/16, 10.0.0./8) 대역(목적지 IP)으로 이동하는 트래픽을 제외한 Top 30 통신 트래픽 생성, dns.lookup파일과 매칭 하여 목적지 IP에 대한 도메인을 구하시오.
추가 설명
> 내부망(172.16.0.0/16, 192.168.0.0/16, 10.0.0./8): !~/^192.168.|^172.16.|^10./
> tcp_connection에서 목적지 IP주소는 세번째 컬럼: $3
> 목적지IP주소 중 사설 IP주소가 아닌 것: $3~/^192.168.|^172.16.|^10./
> 특수문자 escape처리: $3~/^192\.168\.|^172\.16\.|^10\./
$3~/ OOO/ : 3번째 칼럼이 OOO을 포함하는 것부터
$ cat tcp_connection | awk '$3!~/^192\.168\.|^172\.16\.|^10\./ {print $2, $3, $4}' | head -30 > top30
8-1) top30의 목적지 주소에 대한 도메인 주소를 dns.lookup에서 찾아서 dns_matched로 저장
#cat top30 | while read line (리눅스 프로그래밍의 While문)
> do
> dip=$(echo $line | awk '{print $2}') //두번째 컬럼은 dip로 저장
> domain=$(cat dns.lookup | awk -v ip=$dip '$2==ip {print $1}' | head -1) // head-1 사이 스페이스 꼭 넣기!
> echo $line $domain
> done > dns_matched
9) 의심 도메인 (blingq.in)과 통신한 IP 확인
ra -nzr 1_merged_total.arg -s saddr, daddr - "dst host 188.53.211.186" | awk '{print $1}' | sort -u
참고) SSH 트래픽을 많이 사용한 로그 확인하기. 시간(stime), 출발 IP(saddr), 목적지 IP(daddr), 목적지 Port(dport) 순으로 출력
ra -nzr 1_merged_total.arg -s saddr, stime, sport, daddr, stime, dport - "port 22" | awk '{print $1, $3, $4, $6}' | sort -rn | head -30
'정보보안' 카테고리의 다른 글
[정보보안] SSL VPN이란? (VPN & SSL 개념정리) (0) | 2022.08.27 |
---|---|
HTML 기초태그: 간단한 홈페이지 만들기 (0) | 2022.05.25 |
로그 분석 기초 & 분석 예시 (0) | 2022.05.18 |
보안 위협 탐지를 위한 로그분석 (0) | 2022.05.17 |
메두사(Medusa)를 활용한 Dictionary 공격 (0) | 2022.05.17 |