scapy
https://scapy.net/
파이썬으로 작성된 라이브러리
네트워크 패킷 조작/분석을 할 수 있고
네트워크 보안, 프로토콜 분석, 네트워크 테스트 등을 다양하게 제공
TCP, UDP, ICMP, ARP 등 프로토콜 지원. 패킷의 페이로드와 헤더, 필드를 직접 수정할 수 있음
파이썬 설치하기
공식 사이트 : http://www.python.org
파이썬은 인터프리터 언어에 속함 (한줄씩 해석하여 실행하는 언어. ex shell script, php, perl, ruby ... )
yum, dnf-3 등이 파이썬으로 짜여져 있다
2.x 버전은 지원 종료, 현재 3.x 버전대 사용
( 컴파일 언어 : 전체 소스코드를 기계어로 바꾸거 실행파일로 만들고 실행. ex C, C++, C#, JAVA ... )
칼리 기본 vi 색깔이 가독성이 안 좋아서 vi로 /etc/vim/vimrc 에 추가...
그래도 가독성이 안 좋아서 나중에 푸티 배경색 바꿨음
테스트
Ethernet 헤더
ARP 헤더
Hardware Type
Protocol Type
Hardware Address Length
Protocol Address Length
Opcode
Sender Hardware Address
Sender Protocol Address
Target Hardware Address
Target Protocol Address
IP 헤더
Version
Header Length
Type of Service
Total Length
Identification
Flags
Fragment Offset
Time to Live
Protocol
Header Checksum
Source Address
Destination Address
Options
ICMP 헤더
Type
Code
Checksum
Message Body
UDP 헤더
Source Port
Destination Port
Length
Checksum
TCP 헤더
Source Port
Destination Port
Sequence Number
Acknowledgment Number
Offset
Reserved
Flags
Window Size
Checksum
Urgent Pointer
Options
삭제 : del packet(객체명)
한줄로 생성
packet = IP(src='1.1.1.1', dst='2.2.2.2')
테스트 편의상 리눅스에 ~100.6 ip 추가해줌. 재부팅하면 날아가니까 적당함
( 축약 = ip a a dev ens33 ip주소/prefix )
( 삭제 : ip address del dev ens33 ip주소/prefix )
파이썬으로 함수선언, 함수사용. 소스코드는 print처럼 들여쓰기로 한다
파이썬 함수의 파라미터
1. 순서대로 전달 : Positional arguments 위치인수
2. 함수 파라미터명으로 매치하여 전달 : Keyword arguments 키워드인수
키워드 인수로 생성
ex)
packet = IP(src='1.2.3.4', ttl=12, dst='2.2.2.2')
packet = Ether(src='00:0c:29:24:3d:04', dst='ff:ff:ff:ff:ff:ff')
테스트를 위해 칼리 vm웨어에 Network Adapter 2 추가
Edit Connections... > Wired connection 2 > IPv4 Settings에서 Manual로 원하는 ip주소를 고정으로 설정한다
Wired connection 2를 Disconnect 했다가 다시 연결.
ip a로 변경된 ip주소를 확인한다.
Ether, IP, TCP 패킷 생성
계층구조상 Ethernet이 가장 아래, IP, TCP순
( + 이동 단축키 : Ctrl + a는 커서 가장왼쪽, Ctrl + e는 커서 가장 오른쪽으로 이동, f은 오른쪽으로 한 칸 이동, b는 왼쪽으로 한 칸 이동 )
Ctrl + s : 화면 잠금
Ctrl + q : 화면 잠금 해제
ls 명령어를 통해 packet 만든것 상세분석 가능
VM웨어
Edit virtual machine settings > Network Adapter (NAT) > Adbanced... > MAC Address 셋팅 가능
실습 용이성을 위해 강사님 mac address와 맞추었음
systemctl stop firewalld.service
패킷받는쪽 방화벽 중단시켜놓고 (httpd 없으면 yum -y install httpd 로 설치)
iptables
INPUT 체인 : 외부->내부
OUTPUT 체인 : 내부->외부
FORWARD 체인 : 패킷을 타인에게 포워딩 (전달용, 네트워크 방화벽 사용할 때 필요)
-A 체인이름 : 새 룰 추가
( -I 기존 규칙에 삽입, -R 기존 규칙 교환, -D 기존 규칙 제거 )
-s 출발지 IP주소, 대역 등 지정
-d 목적지 IP주소, 대역 등 지정
-j 행위 : 패킷이 일치하면 지정행위를 한다 ex ACCEPT, DROP, REJECT
-p 프로토콜명 : TCP, UDP, ICMP 등 프로토콜 지정하여 제어
iptables -nL으로 전체 체인 확인
iptables -nL INPUT 으로 체인 지정하여 확인
scapy 패킷 전송
변수 = Ether(옵션)/IP(옵션)/TCP(옵션)
packet = Ether(dst='mac값')/IP(ttl=2, dst='192.168.100.6', src='1.1.1.1')/TCP(dport=80)
sendp(packet)로 보내자,
받는쪽 서버에
tcpdump -nn -i ens33 not port 22 and host 192.168.100.6 and tcp -vv
tcpdump 켜놓고
sendp(packet, count=10)
10개 패킷 전송
[root@linuxboan1 ~]# tcpdump -nn -i ens33 not port 22 and host 192.168.100.6 and tcp -vv tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes 17:33:16.879590 IP (tos 0x0, ttl 2, id 1, offset 0, flags [none], proto TCP (6), length 40) 3.3.3.2.20 > 192.168.100.6.80: Flags [S], cksum 0x64cb (correct), seq 0, win 8192, length 0 17:33:16.879632 IP (tos 0x0, ttl 64, id 55432, offset 0, flags [DF], proto TCP (6), length 40) 192.168.100.6.80 > 3.3.3.2.20: Flags [R.], cksum 0x84b8 (correct), seq 0, ack 1, win 0, length 0 17:33:16.881067 IP (tos 0x0, ttl 2, id 1, offset 0, flags [none], proto TCP (6), length 40) 3.3.3.2.20 > 192.168.100.6.80: Flags [S], cksum 0x64cb (correct), seq 0, win 8192, length 0 17:33:16.881076 IP (tos 0x0, ttl 64, id 55433, offset 0, flags [DF], proto TCP (6), length 40) 192.168.100.6.80 > 3.3.3.2.20: Flags [R.], cksum 0x84b8 (correct), seq 0, ack 1, win 0, length 0 ... 중략 ... 10 packets captured 10 packets received by filter 0 packets dropped by kernel |
host 주소는 src출발지 또는 dst목적지 둘 중 아무거나 잡아도 된다
( tcpdump -n -i ens33 not port 포트번호 and host 주소 and tcp 조금 더 간략해진 정보 출력)
iptables -Z INPUT
iptables 카운트 초기화
실습) gns3 라우터 접속
conf t
username 사용자명 secret 비밀번호
ip domain-name 도메인주소
ip ssh version 2
line vty 0 4
login local
transport input ssh <- 원격접속 ssh만 허용
ssh 클라이언트 설정파일수정
vi /etc/ssh/ssh_config
HostkeyAlgorithms ssh-dss,ssh-rsa
KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
두 줄 추가
ssh -o Ciphers=aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc 이 옵션을 이용하여 접속
다음시간엔 파이썬으로 라우터 자동접속 배울듯
https://cafe.naver.com/linuxmasternet/1820
과제) 파이썬 영상 듣기 시리즈 1, 2, 3
https://www.youtube.com/watch?v=IxsLT6YJNPM&list=PL9HD6Lg78edYPNExYJSCu7pmMSizchZWY
https://www.youtube.com/watch?v=y2dqelOMFuo&list=PL9HD6Lg78edZhaNaB6LG9u78KUzv06CJQ
https://www.youtube.com/watch?v=VUz_n_5_1Zw&list=PL9HD6Lg78edaB1sxgD9TXDjn6LI9MSpjq
'정보보안' 카테고리의 다른 글
사전학습) 파이썬 2 (0) | 2024.07.16 |
---|---|
사전학습) 파이썬 1 (0) | 2024.07.15 |
정보보안4 3차시 (0) | 2024.07.06 |
정보보안4 2차시 (0) | 2024.06.30 |
정보보안4 1차시 (0) | 2024.06.29 |