본문 바로가기
정보보안

정보보안4 4차시

by 뭔가해보겠습니다 2024. 7. 7.

 

 

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 ... )

 

kali에서 scapy 확인

 

칼리 기본 vi 색깔이 가독성이 안 좋아서 vi로 /etc/vim/vimrc 에 추가...

그래도 가독성이 안 좋아서 나중에 푸티 배경색 바꿨음

 

scapy 실행화면

 

테스트

 

 

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')

 

Ether().show()로 자기자신의 mac 주소를 알 수 있다

 

테스트를 위해 칼리 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 룰 추가

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)로 보내자,

받는쪽 INPUT 체인에 pkts +1 된것 확인

 

받는쪽 서버에

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