복습
•취약점 분석 단계
1) 기본 스캔
2) 조사(검색)
3) 상세 스캔
4) Exploit
•취약점 분석도구
- 1,3단계 기능을 SW에 내장하고 2단계 지식은 본사 DB에 저장되어 있는 취약점(=지식) 확인해서 리포트로 만들어 줌
- 버전 확인&약간의 테스트(스크립트) 기능
- 기본 스캔은 Nmap Source Code를 사용하기도 한다(Nmap은 Open Source이므로 참조하면 내가 만든 것도 Open Source가 됨 : GPL라이센스)
- 지식은 재산이기 때문에 돈 받고 팔 수 있음
실습( Ubuntu_DVWA & Metasploitabl2 )
- DVWA에 여러 가지 웹 해킹 실습을 했다 --> 로그에 남아있다. - 어디에 그런 내용이 있을까? |
대부분의 모든 로그는 /var/log 안에 있다.
auth.log //시스템에 로그인 성공/실패에 대한 기록을 남기는 로그 ex) Dictionary, Brute Force Attack을 하면 기록 syslog // 시스템에 대한 특이점이 있으면 남기는 로그 cat auth.log // 모든 내용을 터미널 상태에서 다 보게 됨 --> cat은 사용하지 않는 것을 권장 -> less 사용 |
head auth.log // 맨 위에서부터 10줄 보임 ---> Old log
head -20 syslog // syslog를 위에서부터 20줄 보려고 할 때
tail auth.log // 맨 아래에서부터 10줄 보임 --> New log
tail -20 syslog // syslog를 아래에서부터 20줄 보려고 할 때
• 로그 : 6하 원칙 중 5개 있다. (누가, 언제, 어디서, 무엇을, 어떻게) - 로그의 순서 : 월 일 시 ‣ 로그의 일부만 보고 싶을 땐? ---> 골라내기를 하는 명령을 사용 : grep [키워드], awk 문을 사용해보기 |
syslog의 첫번째 컬럼($1), 두번째 컬럼($2), 세번째 컬럼($3)만 보려면? |
tail syslog | awk '{print $1,$2,$3}'은 월, 일, 시 출력된다.
누가($5), 무엇을 했나($10,$11)만 골라서 보려면? |
cat syslog | awk '{print $5,$10,$11}'에서 awk를 사용을 하면 원하는 것만 골라서 볼 수 있다.
아파치로그 ( 웹서버 로그 ) |
백업된 파일을 확인해야 한다. (access.log.1)
access.log => 누가 접근헀나? error.log => 무엇이 문제였나? |
어느 페이지가 접근이 많았을까요? |
$11가 의미하는 건 192.168.5.1 - - [15/Sep/2022:16:46:05 +0900] "GET /dvwa/dvwa/css/login.css HTTP/1.1" 200 741 "http://192.168.5.128/dvwa/login.php" "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"에서 구분자(공백) 기준으로 11번째에 있기 때문에 $11을 사용한다.
sort : 정렬 uniq -c : 중복제거 & 앞에 개수 표시 sort -rn : 내림차순으로 정렬 sort -n : 오름차순 |
본격적으로 공격했던 로그를 분석하기( 가장 큰 파일 : access.log.3.gz) |
• access.log.3.gz 파일을 사용하기위한 과정 $ mkdir /home/j/log $ sudo cp access.log.3.gz /home/j/log $ cd /home/j/log $ sudo gzip -d access.log.3.gz |
sudo cat access.log.3 | awk '{print $11}' | sort | uniq -c | sort -rn으로 보면 너무 많은 로그가 출력이 된다.
sudo cat access.log.3 | awk '{print $11}' | sort | uniq -c | sort -rn | head -20 헤드를 사용해 많이 사용한 20개만 출력을 한다.
• awk문의 특징 - 공백을 기준으로 컬럼으로 인식해서 $1, $2, $3 ... -> 원하는것만 출력해서 볼수 있다. |
• 리눅스 환경에서 로그 분석
- 많은 오픈 소스
- 로그분석에 필요한 CLI 환경
- 파이프라인을 통한 분석 툴의 유기적 조합 가능
- 쉘 스크립트를 통한 자동화된 분석 가능
- 대용량 로그 분석 가능
‣ 윈도우에서 10G 로그 분석 불가능
‣ 리눅스에서는 10G 로그 분석 가능
- 다수의 파일에 반복적 작업이 가능
• 정규표현식(PCRE : Perl Compatible Regular Expression)
- 숫자나 문자의 패턴을 인식하기 위해서 사용하는 표현방식
- 패턴에 해당하는 숫자나 문자를 골라내기 위해서 사용
• 정규표현식 - 메타 문자 ^ -> ‘^abc’ // 문자열의 가장 첫 문자열이 ‘abc’인 패턴 $ -> ‘abc$’ // 문자열의 마지막 문자열이 ‘abc’로 끝나는 패턴 [ ] -> ‘[a-zA-Z0-9]’ // 영문 대소문자 및 숫자를 의미 [ ^ ] -> ‘[^0-9]’ // 숫자 아닌 아무 문자 패턴 . -> ‘a.. d’ // a와 d 사이의 아무 2개 문자가 오는 패턴(점의 개수는 문자의 개수) * -> ‘a*’ // a문자의 0번 이상 반복 반복 • Escape : 특수문자가 기능을 하지 못하게 함(특수문자 앞에 \ 를 붙임) \{n, m\} ->A\{4, 8\} B // A가 4번 이상, 8번 이하로 반복되며, 이후에 B가 오는 패턴 |
※ 예시
휴대폰 번호 010-nnnn-nnnn(n은 숫자) --> /^\d{3}-\d{3,4}-\d{4}$/ [ ] : 대괄호, Braket ex) 소문자만 사용하려면 [a-z] ex) 대문자만 사용하려면 [A-Z] ex) 숫자만 사용하려면 [0-9] ex) 소문자,대문자,숫자만 사용하려면 [a-zA-Z0-9] [^ ] : ~~가 아닌것 ex) 대문자가 아닌것 [^A-Z] ex) 숫자가 아닌것 [^0-9] . : 아무 문자나 와도 됨 ex) .... : 아무 문자나 4개 와도 됨 (점의 개수는 문자의 개수) * : Asterisk (아스테리스크), 문자의 반복을 표현할 때 : { } (중괄호, Brace) a를 3번 반복하면? a{3} Nike를 5번 반복하면? Nike{5} adidas를 3번에서 4번까지 반복하려면? adidas{3,4} 0부터 9까지 숫자를 4번 반복하려면? [0-9]{4} 처음이 127.0.0.1로 시작하지 않는 로그만 골라서 보려면 cat access.log | grep -v "127\.0\.0\.1" -----> .(dot)이 IP주소의 구분자 역할일 뿐, 기능을 해서는 안되기 때문에 \를 붙여야 함 |
알파벳 순서로 재 정렬 하려면? |
echo "Momo Dahyun Sana Mina" | awk '{print $2,$4,$1,$3}'
• 반복문
> (gt : greater than ~ 보다 큰)
>를 사용하면, 파일이 없으면 만들어서 저장, 파일이 있으면 덮어쓰기가 된다(주의!!)
>>를 사용하면, 기존에 파일 뒤에 내용이 추가된다.
멤버들을 알파벳 순으로 정렬하시오 - Momo, Dahyun, Sana, Mina |
$ cat twice.txt | sort -n // n : 오름차순
$ cat twice.txt | sort | sort -rn // rn 은 내림차순
/var/log/syslog 5번째 컬럼이 데몬인데 뒤에 [ ]이 붙어 있음, 이 [ ]을 제거하고 중복제거해서 내림차순 정리해보기 |
cat /var/log/syslog | awk '{print $5}' | awk -F"[" '{print $1}' | sort | uniq -c | sort -rn
awk '{print $5}'에서 5번째 컬럼을 가져오면 그 컬럼은 1번째 컴럼이기 때문에 awk -F"[" '{print $1}'에서는 1번째 컬럼이라고 지정을 해야 한다.
로그 분석 (Argus IDS)
• bpf (Berkeley Packet Filter)
- awk 대신 사용하는 필터 도구
- 사람이 사용하는 언어와 매우 유사 (영어권 국가의 모국어가 영어이면 따로 배우지 않아도 될 정도)
실습 다운로드 - Ubuntu_DVWA에서 실습파일 다운로드 -Firefox를 켜고 카페에들어가 파일 3개를 다운로드 한다.( Windows에서 다운하는게 아님) - sudo apt install p7zip // 7zip 파일 압축을 풀기 위해 p7zip 설치 - 7zr x log.7z // 압축풀기(x) , 압축하기(a) |
※ 확장자가 arg라고 되어 있는 파일이 있는데 Argus IDS에서 생성된 로그이다. ---> Binary로 되어 있다.(용량을 줄이려고)
---> arg 파일을 보기 위해서는 Argus IDS의 클라이언트 도구를 설치해야 한다. (Argus IDS Server는 네트워크에서 모니터링을 한다)
Argus IDS Client 설치 $ tar zxvf argus-clients-3.0.8.tar.gz $ cd argus-clients-3.0.8/ $ sudo apt update $ sudo apt install gcc $ sudo apt install flex bison byacc $ sudo su // 같은 디렉토리에서 root권한으로 전환됨 (PW : ubuntu ) # ./configure # make && make install # ra --help // 도움말이 나오면 성공적으로 설치됨 |
• sed 문
- 치환할 때 사용 => sed 's/old/new/g'
- .sample로 끝나는 텍스트 모두 제가 하려면 => sed 's/\. smaple//g'
- bitcoin을 ethereum으로 바꾸려면? => sed 's/bitcoin/ethereum/g'
• DSN (Domain Name System)
- 도메인 이름에 해당하는 IPv4주소를 알려주는 것: 정방향 조회 (A)
- 도메인이름에 해당하는 IPv6 주소를 알려주는 것 : 정방향 조회 (AAAA 또는 A6)
- IP주소에 해당하는 도메인 이름을 알려주는 것 : 역방향 조희 (PTR : Pointer)
- Query : Web Brower가 DNS에게 도메인 이름에 해당하는 IPv4/IPv6를 물어보는 것
- Response : DNS가 Web Browser에게 IPv4/IPv6를 알려주는 것 (악성코드가 C&C의 URL을 DNS에게 물어볼 것임)
[**]를 sed문으로 제거하고, awk문으로 $5, $5을 추출해서 내림차순으로 정렬하려면? |
2_dns.log을 보면 구분자가 [**]로 되어있다 이제 이 부분을 sed로 제거를 해보자.
03/25/2013-21:23:10.029321 [**] Response TX 4c26 [**] shopping.phinf.naver.net.static.gscdn.net [**] A [**] TTL 34 [**] 121.156.109.46 [**] 77.47.128.224:53 -> 192.168.1.196:19513 sed로 [**] 구분자를 제거를 하면 03/25/2013-21:23:10.029321 Response TX 4c26 shopping.phinf.naver.net.static.gscdn.net A TTL 34 121.156.109.46 이다. 우리는 도메인네임 과 IP주소가 필요하기 떄문에 $5 하고 $9가 필요하다(공백으로 구분을 한다) |
cat 2_dns.log | sed 's/\[\*\*\]//g' | awk '{print $5,$9}' | sort | uniq -c | sort -rn을 사용하면 수많은 로그들을 볼 수 있다.
Response로 되어 있는 것만 추출하려면? |
cat 2_dns.log | sed 's/\[\*\*\]//g' |awk '$2~/Response/ && $6~"A" {print $5,$9}' |sort | uniq -c |sort -rn| head -20 > dns_search 명령어는 Response로 시작하는 것 중에 $5와 $9를 출력한다.
$2~/Response/ : $2에 Response를 포함하고 있는 것만 고른다.
&& : and 조건
$6~"A" : $6에 IPv4 주소(정방향 조회)를 포함하고 있는 것만 고른다.
출발지가 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
ra -nzr 1_merged_total.arg -s saddr, daddr, dport - "src net 192.168.1.0/24 and dst port (443 or 80) and tcp" | sort | uniq -c | sort -rn > web.log으로도 사용이 가능하다.
tcp 포트로 출발하는 IP 통계를 구하시오 - 인터넷 연결이 많은 사용자는 누구였을까? |
ra -nzr 1_merged_total.arg -s saddr - "tcp" | sort | uniq -c | sort –rn
saddr은 출발 IP이다.
TCP 연결 하는 출발지IP, 목적지IP, 목적지Port를 추출해서 중복제거하고 내림차순 정렬하고 결과를 tcp_coonection으로 저장하기 |
ra -nzr 1_merged_total.arg -s saddr, daddr, stime, dport - "tcp" | awk '{print $1,$2,$4}' | sort | uniq -c | sort -rn > tcp_connection에서 stime을 넣었다 제거하는 이유는 daddr과 dport가 합쳐져서 172.16.2.211.80으로 되기 때문이다.
tcp_connection에서 사설IP를 제외한 상위 30개만 따로 저장하려면? |
• 사설IP주소를 제외하려면? - 사설IP : 192.168.x.x 172.16.x.x 10.x.x.x - 사설IP만 골라서 보려면? /^192.168.|^172.16.|^10./ // ^~~은 ~~으로 시작하는 것 - 사설IP가 아닌것만 보려면? !~/^192.168.|^172.16.|^10./ // ! 을 넣어 부정으로 만들어준다. - tcp_connection에서 목적지IP($3)가 사설IP가 아닌것만 보려면? $3!~/^192.168.|^172.16.|^10./ - $2, $3, $4만 보면된다.($1은 개수) : awk '$3!~/^192.168.|^172.16.|^10./ {print $2,$3,$4}' - 특수문자 중에 .(dot)은 Escape처리해야 함 : awk '$3!~/^192\.168\.|^172\.16\.|^10\./ {print $2,$3,$4}' |
cat tcp_connection | awk '$3!~/^192\.168\.|^172\.16\.|^10\./ {print $2,$3,$4}' | head -30 > top 30이다.
cat 2_dns.log | sed 's/\[\*\*\]/|/g' | awk -F"|" '$2~/Response/ && $4~"A" {print $3,$6}' | sort -u > dns.lookup
dns.log에서 sed로 [**] 구분자를 없애고 Response, A를 포함하고 있는 도매임 네임과 IP주소를 dns.lookup파일로 만들어준다.
top30에 있는 목적지 주소를 dns.lookup을 참조해서 도메인 이름과 매칭을 시켜서 dns_matched로 저장하시오 |
top 30의 IP와 dns.lookup의 IP가 같아야 한다.
• While 문을 사용 # cat top30 | while read line > do > dip=$(echo $line | awk '{print $2}') > domain=$(cat dns.lookup | awk -v ip=$dip '$2==ip {print $1}' | head -1) // top30의 IP와 dns.lookup의 IP가 같다면 > echo $line $domain > done > dns_matched |
도메인 중에 이상한 도메인이 있는 걸 확인할 수 있다.
범인은 누구일까요? => blinq.in을 방문한 사용자 또는 악성코드 PC : 192.168.1.71
회사 내부에 또다른 사용자가 blinq.in을 방문했는지 확인 |
192.168.1.71 하고 192.168.1.72 아이피 주소가 blinq.in사이트에 방문을 하였다.
ra -nzr 1_merged_total.arg -s saddr, daddr - "dst host 188.53.211.186" | awk '{print $1}' | sort -u
'Rookies 9기 > 시스템 네트워크보안' 카테고리의 다른 글
시스템/네트워크 보안 7일차 (0) | 2022.09.23 |
---|---|
시스템/네트워크 보안 5일차 (0) | 2022.09.21 |
시스템/네트워크 보안 4일차 (0) | 2022.09.20 |
시스템/네트워크 보안 3일차 (0) | 2022.09.19 |
시스템 / 네트워크 보안 2일차 (0) | 2022.09.16 |