2024. 4. 23. 15:53ㆍLinux/KALI
포트 스캐닝은 시도하는 것 만으로도 공격행위로 간주된다.
실습은 VMware를 이용해 진행하고 있고,
실습은 VM 내부 네트워크에서만 진행하고 다른 외부 PC로는 어떠한
공격행위도 하지 말도록 하자
포트 스캐닝이라는 원하는 PC의 개방된 포트들을
확인해볼 수 있는 Kali 명령어가 있다.
바로 nmap을 한번 실습해보자
먼저 각 PC들의 방화벽은 비활성화 시켰다.
그런 다음 각 리눅스 4개에 프로그램을 설치해주고
포트를 개방시켰다.
#!/bin/bash
yum install -y httpd*
yum install -y vsftpd*
yum install -y sendmail*
yum install -y dovecot*
yum install -y mariadb*
yum install -y bind*
yum install -y telnet
yum install -y telnet-server.x86.64
yum install -y ftp
yum install -y nfs*
yum install -y samba*
yum install -y postfix*
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl start named
systemctl start httpd
systemctl start sendmail
systemctl start vsftpd
systemctl start mariadb
systemctl start telnet.socket
systemctl start postfix
systemctl start nfs
systemctl start smb
systemctl start postfix
systemctl start dovecot
systemctl enable named
systemctl enable httpd
systemctl enable sendmail
systemctl enable vsftpd
systemctl enable mariadb
systemctl enable telnet.socket
systemctl enable postfix
systemctl enable nfs
systemctl enable smb
systemctl enable dovecot
위 같이 하는 이유는 일부러 취약점을 만들어 낸 것이다.
이렇게 포트를 열어놨을때
Kali Linux의 nmap 명령어로 개방되어 있는 포트를 확인해볼 수 있다.
개방된 포트를 모두 보여주고 있다.
이것이 모두 취약점이라 할 수 있다.
위처럼 상대방의 포트를 스캔한 것을 정보수집 / 공격행위인데
이는 해킹의 과정중 하나이다.
모의해킹 수행 표준이 존재하는데
PTES
(Penetration Testing Execution Standard)
자세히 나와있으니 참고하도록 하자
해킹의 과정을 크게 나눠보면
1. 정보 수집
2. 공격 / 침투
3. 공격 전이
위 세 단계로 나눠볼 수 있다.
이 중에서 가장 중요한 것은 정보 수집 단계인데
해킹 과정중 절반을 넘게 차지할 정도다.
우리가 공격 이전 알아내야할 정보는
바로 IP가 먼저라고 생각한다.
IP를 알아야 그 PC에 접근할 수 있기 때문
그렇다면 먼저 IP 주소을 알 수 있는
모든 명령어를 확인해보자
IP 정보 수집
ipconfig , ifconfig
ping
tracert , traceroute
nslookup
포털 사이트 ( ipnawa.com 등 )
netstat
arp
이 모든 명령어들은 IP를 알 수 있는 수단이지만
이중 ping 명령어는 대표적인 공격도구다 (DoS)
icmp 프로토콜의 양이 많이지면
상대측 PC에 과부하를 줄 수도 있기 때문이다.
그래서 기본적으로 서버의 ICMP 프로토콜은
예외적인 상황을 제외하곤 모두 차단되어있다.
방화벽을 다시 실행한뒤
위 같은 방식으로 ICMP를 차단했다.
방화벽을 실행한김에 다시 nmap으로 포트스캔을 해보았다.
포트가 아무것도 보이지 않는 것을 볼 수 있다.
외부의 ICMP는 차단됐지만 여전히
내부에선 ICMP 가 가능하다
내부의 icmp도 차단해보자
/proc/sys/net/ipv4/
위 디렉토리 경로로 이동해보면
우리가 방어할 수 있는 대부분의 설정이
모여있는 것을 볼 수 있다
여기서icmp 항목을 찾아보자
한눈에 봐도 icmp를 무시할 것 같이 생긴 파일이다.
들어가보면 0으로 되어있다.
1로 바꿔주면 차단이 된다.
하지만 이 파일은 vi 편집기로 수정이 불가능하다
proc 디렉토리는
가상파일 시스템 디렉토리다.
리눅스가 부팅되며
커널이 가상 파일들을 담아두는 곳이다.
확인해보면 proc 아래 파일들은
대부분 용량이 0으로 되어있다.
sysctl -w 명령어로 내용을 수정해주거나
리다이렉션 기호로 수정해줄 수 있고
설정 후에는 icmp가 차단된 것을 볼 수 있다.
하지만 이런 명령어로 바꾼 설정은 재부팅시 사라지게 되어있다.
그러나 부팅할때마다 설정을 다시하기는 너무 번거롭다.
당연히 리눅스엔 이런 커널 수정 명령어를 자동화 할 수 있다.
/etc/sysctl.conf 파일을 확인해보자
해당 파일에 마지막 줄에
아까와 같은 icmp_ignore의 경로를 적어주자
이제부턴 부팅될때마다 커널이
이곳에 적힌 명령어를 실행시켜준다.
위에서 설정한 모든 방화벽 관련 설정은 당연히
손쉽게 GUI 방식으로도 가능하다.
또한
필터 반전 옵션 선택시
체크한 옵션만 허용되고 나머진 모두 차단된다!
명령어로는 아래와 같다.
firewall-cmd --permanent --add-icmp-block-inversion
필터 반전의 명령어
DNS 정보 수집
DNS 정보 수집 을 위해
외부와의 접속을 차단해둔 뒤
내부에 가상 DNS 서버를 만들어 주고
실습해보자
가상의 웹서버 DNS를 내부에 만들어 두었다.
이제 각각의 DNS 정보수집 도구를 사용해보자
위 사진처럼 DNS 정보 수집 도구를 이용하면
각 도메인의 IP를 확인할 수 있다.
여러 DNS 정보수집 도구가 있으니 확인해두자
#dnsmap [옵션] [도메인이름]
옵션
-r 스캐닝 결과 파일로 저장
-w 워드 리스트로 검색 ( 사전에 똑같은 파일을 생성해두고 그 안에 워드를 지정해주기)
-c CSV 형태로 저장 ( ',' 단위로 나눠줌)
#dmitry [옵션] [도메인이름]
옵션
-p 포트만 스캔
#dnsrecon [옵션] [도메인이름]
옵션
-d 도메인 지정 (d 뒤에 도메인 입력)
--db SQL형식의 파일로 저장
--xml 엑셀 형식의 파일로 저장
-c CSV 형식의 파일로 저장
#dnsenum [옵션] [도메인이름]
옵션
-o 결과물 파일 저장
#fierce [옵션] [도메인이름]
옵션
--domain 도메인 지정
포트스캐닝
맨 처음 사용했던 nmap이
상대방의 개방된 포트를 확인하는 명령어다.
이러한 포트 스캐닝은 세 종류로 나눌 수 있는데
1.Open Scan : TCP Connected Scan
2.Half Open Scan : SYN Scan
3.Stealth Scan : FIN, NULL, X-MAS, ACK
1번은 말그대로 TCP 3-Way Handshake가 완전히 이뤄진 것으로 확인하는 법이다.
즉 상대방 측에 로그가 남게된다.
2번은 SYN을 상대방에게 보내면 상대방에서 SYN+ACK 신호가 날아올 것이다.
기존 3-Way에서 2번째 까지만 이뤄지는 것이다, 이는 상대방측 로그가 남지않는다.
3번은 상대방이 응답하지 못하는 시퀀스를 보내는 것이다.
FIN 스캔은 FIN 값만 채워서 보내는 것이고
NULL 값은 아무것도 채우지 않는 것이다.
X-MAS 스캔은 이론상 모든 Flag를 채워서 보내는 거지만(111111)
실제로는 UPF Flag만 채워서 보낸다
Flag 값을 조정해서 받은 PC는 SYN이 아니면 응답하지 않기 때문에
응답이 오지 않는 것으로 개방 여부를 확인한다.
nmap
-sT : TCP 스캔
-sU : UDP 스캔
-sS : SYN 스캔 (Kali는 기본이 SYN 스캔이기 때문에 굳이 줄 필요는 없다)
-sF : FIN 스캔
-sN : NULL스캔
-sX : X-MAS 스캔
-sA : ACK 스캔
3~7번째는 Stealth Scan
-O : 운영체제 정보 스캔
(리눅스에서 자기 커널 버전 확인법 uname -a)
-p : 스캔할 포트 직접 지정( 다수 지정 가능 ex : 20,21 또는 80-500 )
-V : 스캔 상세정보 (시스템 전체정보)
-v : 스캔 상세정보
-iL : 스캔 목록 활용 검색
--reason : 포트 상태를 판단한 이유
-open : Open된 포트만 출력
-top-ports N : 상위 N개의 포트만 출력
위의 옵션들을 사용해 상대방의 포트를 스캔할 수 있다.
또한 IP를 입력할때 변화를 주어서
192.168.10.0 /24 으로 네트워크 대역으로 설정도 가능하다
192.168.10.50,150 으로 여러 IP 를 지정할 수도 있다.
192.168.10.150-201 으로 IP범위를 지정할 수도 있다.
192.168.*.50-100 으로 특정클래스의 특정 IP 부분을 지정할 수도 있다.
ping 스캔
nmap -sP [IP주소]
위 명령어로 대상이
켜져있는지 바로 알 수 있다.
이것을 IP 대역으로 바꾸면 네트워크 내
어떤 PC가 up상태인지 알 수 있다.
시간 지연
nmap - T(n) [IP주소]
T0 : Paranoid > 가장 느림 (5~10분)
T1 : sneaky > 조금 느림 (2~3분 이내)
T2 : polite > 느림 (수분내)
T3 : normal > 보통
T4 :aggressive > 빠름
T5 : insane > 가장 빠름
이런 시간지연 기능이 생긴 이유는
공격하려는 곳의 UTM등의 설정으로
초당 SYN 패킷 갯수를 제한할 수 있기 때문에
시간차로 이를 피하기 위해서 만들어 진 것이다!
즉 이론상으론 여러 속도, 초당 전송 수의 제약을 둔
PC를 우회할 수 있다는 것으로 알고 있자
출발지 IP 주소 변조
진행하기 앞서 wireshark를 리눅스에 설치해주자
yum install -y wireshark-gnome
wireshark < 와이어샤크 실행 명령어
실행 후에 네트워크 인터페이스를 선택해주고 시작하자
시작한 뒤에 포트 스캐닝을 실시하고 wireshark 를 중지한 뒤에 로그를 확인해보자
와이어샤크를 확인해보면
시간, 출발지 도착지 IP, 프로토콜, 길이(용량), 정보등이 모두 출력되느 것을 볼 수 있다.
이렇게 확인이 출발지 확인이 쉽기 때문에
IP spoofing이라는 기술로 출발지 IP를 변조해보자
nmap -D 100.100.100.100 192.168.10.50
위 명령어를 입력하니 출발지 IP가 100.100.100.100으로 바뀌었다.
하지만 공격자 IP가
192.168.10.250 과 100.100.100.100
둘다 SYN 요청을 보낸 것이 확인된다.(나의 IP는 기본적으로 포함)
아직 나의 IP가 노출되긴 하지만 둘중 누가 공격자인지는 모르는 것이다!
또한 IP를 여러개로 스푸핑 해볼 수도 있다.
nmap -D 100.100.100.100,200.200.200.200 192.168.10.50
여러 IP 사이에 ',' 를 붙여주면 된다!
이제 와이어 샤크에서 3개의 IP가 나오는 것을 알 수 있다.
꼭 IP를 지정하지 않고 랜덤하게 스푸핑할 수도 있다
nmap -D RND:10 192.168.10.50
위 명령어로 10개의 랜덤한 IP로 스푸핑 해주었다
와이어 샤크의 출발지 IP가 랜덤하게 변조된 것을 볼 수 있다.
패킷 분할 공격
이 방법은 시스템에서 패킷을 쪼개서 보내면
방화벽 (UTM,침입 탐지 시스템등) 측에서 통과가 되는 허점을 노린 우회방법이다.
nmap -f 192.168.10.50
위 명령어로 패킷 프레그멘테이션 옵션을 줄 수 있다.
이렇게 스캔하게 되면 info에 보면 알 수 있듯이
fragmented IP Protocol로 뜨면서 TCP 번호만 알고 있고
어떤 정보인지는 알지 못한다.
이 방법은 시스템에서 fragmentation을 쪼개서 보내면
방화벽 측에서 통과가 되는 허점을 노린 우회방법이다.
우리가 스캔 및 ping으로 보내는 데이터의 크기는 대부분
54~60 byte 사이로 되어있다.
상대 PC에 보내는 길이(용량)도 조절하여 보낼 수 있다.
nmap -data-length 100 192.168.10.50
확인해보면 이전에 보내던 용량과 다르게 100이 추가 된 것을 볼 수 있다.
여담으로
nmap -data-length 100 192.168.10.50 -o nmap.txt
nmap -data-length 100 192.168.10.50 > nmap.txt
또한 nmap 명령어는 옵션으로 스캔닝 목록을 저장할 수 있다.
리다이렉션도 가능하다
부하 분산 여부 확인
lbd google.com
예시로 선생님께서 진행한 사진을 가져왔다.
한번에 많은 lbd 를 실행하는 것은 차단될 수 있기 때문에 조심하고
반드시 악용하지 말도록 하자
우리가 외부 dns로 ping을 보내면
거대 기업들의 IP는 항상 바뀌는 것을 볼 수 있는데
이는 부하분산 때문에 매번 다른 IP로 연결 되는 것이다.
이상으로 정보 수집에 관하여 알아보았다.
'Linux > KALI' 카테고리의 다른 글
Kali 10. 침투 공격 (1) | 2024.06.12 |
---|---|
Kali 9. DoS 공격, netcat, TCPDump (0) | 2024.04.30 |
Kali 8. Snort 침입탐지 (0) | 2024.04.29 |
Kali 2. 한글 입력기 설치 (0) | 2024.04.22 |
Kali 1. Kali Linux 설치 (0) | 2024.03.04 |