일일 정리

Network Layer 구조, 해킹 실습 John the Ripper

mysecurity 2025. 4. 9. 17:34

목차

1. Network Layer 구조

1-1 ARP

1-2 ICMP

 

2. 해킹 실습 John the Ripper

2-1 John the Ripper 설치

2-2 패스워드 크랙

 

 

1. Network Layer 구조

1-1 ARP

● ARP 

ARP는 cache 목록을 조회하거나 목록을 추가 삭제한다.

# arp -a : 캐시 전체 목록을 검색한다. 

# arp -s : 목록을 정적으로 추가한다.

# arp -d : 목록을 삭제한다.

 

ip n 명령어로도 arp 테이블을 조회할 수 있다.

 

※ ARP 헤더

H/W Type
(2 byte)
Protocol Type
(2 byte
H/W Length
(1 byte)
Protocol Length
(1 byte)
OP
(2 byte)
 
SA (Sender ethernet address) (6 byte) Sender IP address (4 byte)
DA (Target ethernet address) (6 byte) Target IP address (4 byte)

 

arp 요청 시 상대의 맥주소를 모르므로 DA에 제대로 된 값을 입력할 수 없다. 통상 브로드캐스트로 보낸다고 알려지나, 프로토콜에서 모르는 값에 대해 정해진 규격은 없으므로 비워두거나 임의의 값을 채울 수 있다.

 

- H/W Type (하드웨어 타입) : 하드웨어 주소(Network 유형)

    * http://www.iana.org/assignments/arp‐parameters/ 참조

    * Ethernet : 1

 

- Protocol Type

    * 어떠한 유형의 프로토콜(IPv4,IPv6,ATM등)을 사용하는지 정의한다.

    * IPv4 : 0x0800

 

- H/W Length : H/W type에서 사용하는 주소의 길이이다.

    * Ethernet : 6byte

 

- Protocol Length :  Protocol Type에서 사용하는 주소의 길이이다.

    * IPv4 : 4byte

 

- OP : ARP와 RARP를 구별하기 위해 사용한다.

    * 1 : ARP요구,  2 : ARP응답

    * 3 : RARP 요구,  4 : RARP 응답

 

- SA, Sender IP : Sender의 MAC과 IP 주소이다.

 

- DA, Target IP : Destination의 MAC과 IP 주소이다.

 

● RARP

- 나의 MAC 주소를 이용해 나의 IP 주소를 얻어오는 프로토콜이다.

 

- 디스크를 가지지 않은 호스트가 자신의 IP 주소를 서버로부터 얻어내려면 RARP라는 TCP/IP 인터넷 프로토콜을 사용해야 하며, 일반적으로 자체의 디스크 기억 장치가 없는 워크스테이션이나 지능형 터미널에 의해 이용된다. 

 

- RARP 패킷은 ARP 패킷과 동일한 형식을 갖는다.

 

1-2 ICMP

● ICMP

ICMP(Internet Control Message Protocol)는 송신측의 상황과 목적지 노드의 상황을 진단한다.

ICMP로 인한 공격이 있을 수 있어 최근에는 ICMP 패킷을 받아도 무시하도록 하는 추세다.

 

※ ICMP 헤더

Type (1 byte) Code (1 byte) Checksum (2 byte)
Type과 Code에 따른 내용

 

ICMP 헤더에는 type과 code가 있는데, 이 둘의 값을 조합하여 ICMP의 형태를 확인한다.

 

● ICMP 구조

- Type : ICMP 메시지 종류

- Code : 각 Type에 대한 코드값

타입 코드 설명
0 0 에코 응답 (ping 응답)
8 0 에코 요청 (ping 요청)
9 0 라우터 광고
10 0 라우터 청원
3 0
1
. . .
네트워크 도달 불가
호스트 도달 불가
 . . .
5 . . . 재지정(redirect)
. . . . . .  . . .

 

 현재 쓰이는 ICMP는 에코 응답/요청 정도이나, 이조차 방화벽에 막히는 경우가 많다.

 redirect의 경우, 잘못된 경로로 게이트웨이를 재지정하도록 하는 공격이 가능하다.

 

● ICMP – Ping

ping은 가장 많이 사용하는 형태의 ICMP 메시지 중 하나이다.

 

※ ping 헤더

Type(8 or 0)
(1 byte)
Code(0)
(1 byte)
Checksum
(2 byte)
Identifier
(2 byte)
Sequence number
(2 byte)
Option

 

- Identifier

: Ping 프로세스의 프로세스 ID로, 여러 개의 ping이 동일 호스트에서 실행되는 경우 응답을 식별할때 쓰인다.

 

- Sequence number

: 요구 패킷의 순서로, 0부터 시작한다.

 

● ICMP redirect의 이해

 

① 호스트가 인터넷으로 패킷를 보낼때 디폴트 라우터로 라우터 A가 정해져 있다면 호스트는 일단 패킷을 라우터 A로 보낸다.

 

② 라우터A는 라우팅 테이블을 검색해서 직접 데이터를 처리하는것 보다 라우터 B가 처리하는것이 효과적이라면 패킷을 라우터 B로 전송한다.

 

③ 라우터 A는 동일 목적지로 보내는 패킷이 라우터 B로 전송되도록 호스트에게 ICMP 리다이렉트 패킷을 보낸다.

 

④ 호스트는 라우팅 테이블에 현재 전송중인 패킷에 대한 정보를 저장하고 동일 목적지로 전송하는 패킷은 라우터 B로 보낸다.

 

● ICMP 재지정 시에 반드시 확인해야 하는 세가지 IP

- Redirect 원인이 되는 IP

- Redirect 패킷을 보낸 라우터 IP

- 앞으로 이용하게 될 IP

 

● ICMP redirect 패킷 구조

Ethernet Header
IP Header
Type (5) Code (0-3) Checksum
새로운게이트웨이주소(4 byte)
IP header (12 byte)
SI (sender IP : 4 byte)
DI (Destination IP : 4 byte)
Data (8 byte)

 

2. 해킹 실습 John the Ripper

2-1 John the Ripper 설치

패스워드 크랙을 실습하기 위해 오픈 소스 소프트웨어인 John the Ripper를 이용한다.

 

칼리리눅스에 다음과 같이  apt 혹은 wget을 이용하여 John the Ripper를 설치한다.

 

● apt를 이용한 설치

# apt install ‐y john   : 설치
# apt show john        : 상세정보 확인

 

John the Ripper 배포본은 아직 YESCRYPT 방식의 hash를 지원하지 않으므로 암호 방식을 SHA512로 수정한다.

# vi /etc/login.defs

 ......
 #ENCRYPT_METHOD YESCRYPT // 기존 설정 주석처리
 ENCRYPT_METHOD SHA512  // SHA512 설정 추가
 ......

 

# vi /etc/pam.d/common‐password

 ......
 #password       [success=2 default=ignore]      pam_unix.so obscure yescrypt // 기존 설정 주석처리
 password       [success=2 default=ignore]      pam_unix.so obscure sha512  // SHA512 설정 추가
 ......

 

● wget을 이용한 설치

YESCRYPT 방식의 hash를 지원하도록 직접 설치한다.

https://www.openwall.com/john/ 에서 제공되는 버전은 Kali에서 컴파일에 문제가 있으므로 git에서 제공하는 소스를 이용한다.

 

# apt update

# apt install ‐y build‐essential libssl‐dev zlib1g‐dev yasmlibgmp‐dev pkg‐config \ libbz2‐dev libcurl4‐openssl‐dev libpcap‐dev libopenmpi‐dev openmpi‐bin git

# cd /usr/local

# git clone https://github.com/openwall/john ‐b bleeding‐jumbo john‐jumbo

# cd john‐jumbo/src

# ./configure

# make ‐s clean && make ‐sj$(nproc)

# cd ../run

# ./john ‐‐list=formats | grep yescrypt

# ln ‐s /usr/local/john‐jumbo/run/john /usr/local/bin/john

# ln ‐s /usr/local/john‐jumbo/run/unshadow /usr/local/bin/unshadow

 

2-2 패스워드 크랙

패스워드 크랙을 위한 사용자 계정을 생성한다.

계정 패스워드
st1 st1
st2 asdf
 . . .  . . .

 

다음과 같은 과정을 수행하여 패스워드를 크랙한다.

 

step 1 : 암호 파일 생성

    - unshadow 명령: shadow 암호를 passwd 파일에 병합한다.

    - 문법:  unshadow  [passwd 파일]  [shadow 파일]

    # unshadow  /etc/passwd  /etc/shadow  > passwd.1

 

step 2 : 암호크랙

    - john 명령

    - 문법: john  [암호파일]

    # john  passwd.1

위의 명령어를 실행하고 가만히 기다리고 있으면 언젠간 크랙이 완료된다.

실행 중 아무 키나 입력 시 크랙 성공 숫자나 초당 시도 횟수 등 현재 진행 상황을 출력한다.

크랙 실행 중 화면

 

크랙암호확인

    # cat  john.pot

 

진행확인

    # john ‐‐show passwd.1

    # john ‐‐status