목차
1. DHCP 개념
2. DHCP 원리
- Discover, Offer, Request, Ack 등
3. DHCP 기능
- 임대(Lease), 갱신(Renewal), 반환(Release)
4. DHCP relay agent
- gi-address
5. DHCP 취약점
- DHCP starvation, DHCP spoofing
DHCP(Dynamic Host Configuration Protocol)
같은 네트워크 대역(LAN)에서 IP를 관리해주는 서버
특정 사용자가 IP가 없을 때, DHCP 서버로부터 요청을 받으면,
몇 번 IP를 얼마 동안 사용하라고 DHCP가 해당 네트워크 서버에서 사용할 수 있는 IP를 빌려줌
같은 네트워크 대역에서 사용할 수 있는 IP 주소를 DHCP 서버가 관리하면, 사용자들이 필요할 때마다 가져가 쓰면 됨
DHCP 서버가 없으면 같은 네트워크 대역에서 똑같은 IP를 두 명이 사용하거나, 누가 어떤 IP를 사용하는지 모르니 충돌이 일어날 것
그래서 이러한 IP 주소를 관리하는 서버
- 공유기나 WiFi에 DHCP 서버가 있음
구분 | 설명 |
|
개념 | 동적 호스트 구성 프로토콜(네트워크 정보 할당) |
|
목적 | DHCP 사용 없이 정적(static) 설정해도 되지만, 여러 개의 클라이언트를 관리해야 할 경우, user가 IP를 변경하면 IP 충돌로 관리가 어려움 → DHCP server를 이용해서 동적으로 제공, 서버에서 관리 |
|
원리 |
Discover | 클라이언트가 DHCP 서버를 찾기 위한 패킷, Broadcast로 전송 LAN 상에 DHCP가 있는지 찾는 과정 |
Offer | 서버가 Discover 패킷을 받았으면, 자신이 임대해줄 수 있는 네트워크 정보와 함께 자신의 IP 전달, Broadcast | |
Request | DHCP 서버에서만 패킷 전달, Broadcast | |
Ack | DHCP가 최종적으로 승인을 내리고 네트워크 정보 임대, Broadcast/Unicast | |
Release | client에서 DHCP server에 Binding된 configuration parameter를 해제한다는 message - 네트워크 주소 반환 | |
Nak | DHCP server에서 client에게 요구한 시간이 경과했다는 message |
기능
초기 설정
ipconfig /release
PC에 부여받은 IP가 0.0.0.0으로 변경(무선 LAN 어댑터 WiFi), 반환 과정과 동일
임대(Lease)
ipconfig /renew
IP를 받는 과정, iptime의 경우 기본적으로 7200초(2시간) 설정
(+ 유동 인구가 많은 카페에 임대 시간을 길게 설정하면 더 이상 제공할 주소가 사라지므로, 적절히 설정)
물리적 네트워크(172.30.1.254) - Vmware 내부 네트워크(192.168.65.1)
갱신(Renewal)
IP 임대 시간 갱신
IP를 임대받은 클라이언트가 계속 사용중이어서 DORA의 과정을 거치면 불필요한 트래픽 발생
(갱신 시도 2회)
1) 임대시간 50% 경과 시, 갱신 시도 → ① 성공: 설정 임대시간만큼 추가 할당 / ② 실패: 갱신 보류
2) 임대시간 87.5% 경과 시, 두번째 갱신 시도 → ① 성공: 설정 임대시간만큼 추가 할당 / ② 실패: 갱신 종료
- 전반적인 과정: Unicast 통신 시도(이미 DORA 과정에서 DHCP의 IP를 알아왔으므로), 갱신이 2번 모두 실패할 경우 반환 과정을 거침
ipconfig /all
iptime(192.168.0.1) 고급 설정> 네트워크 관리 > DHCP 서버 설정
KT(172.30.1.254:8899) 장치설정 > 네트워크 관리 > LAN 연결 설정
DHCP 갱신
반환(Release)
ipconfig /release
DHCP에게 할당 받았던 IP 반환(갱신 과정 실패 시)
임대 시간이 모두 지났는데 Client와 DHCP server끼리 통신이 되지 않는 경우, DHCP는 반환받은 것으로 처리
DHCP relay agent
일반적으로 DHCP 메시지는 Broadcasting 되기 때문에 단말과 DHCP 서버는 반드시 동일 서브넷 상에 위치해야 함
(라우터가 브로드캐스트 패킷을 다른 인터페이스로 전달(IP Forwarding)하지 않기 때문)
단말이 송신한 DHCP 메시지(브로드캐스트 패킷)가 라우터를 통해 다른 서브넷에 위치한 DHCP 서버로 전달될 수 없음
그러나, DHCP 서버가 각 subnet(LAN) 마다 위치하는 것은 실제 통신 사업자망의 구성에 실용적이지 못함
→ DHCP Relay Agent 기능으로, 단말이 송신하는 DHCP Broadcast packet을 Unicast로 변환하여 DHCP 서버에 전달(L2 Switch)
구분 | 설명 | |
Discover |
기본 | 클라이언트가 DHCP 서버를 찾기 위한 패킷, Broadcast로 전송 LAN 상에 DHCP가 있는지 찾는 과정 |
변환 | 단말이 브로드캐스트 메시지를 보내면, DHCP Relay Agent가 수신하여 유니캐스트로 변환 (SIP=DHCP Relay Agent, DIP=DHCP Server) → DHCP 서버로 전달 |
|
Offer |
기본 | 서버가 Discover 패킷을 받았으면, 자신이 임대해줄 수 있는 네트워크 정보와 함께 자신의 IP 전달, Broadcast |
변환 | DHCP 서버가 DHCP Relay Agent로 유니캐스트를 보내면, 이를 수신한 DHCP Relay Agent는 브로드캐스트로 변환해서 단말로 전송 |
|
Request |
기본 | DHCP 서버에서만 패킷 전달, Broadcast |
변환 | 단말이 브로드캐스트 메시지를 보내면 DHCP Relay Agent가 수신해서 유니캐스트로 변환 (SIP=DHCP Relay Agent, DIP=DHCP Server) → DHCP 서버로 전달 |
|
Ack |
기본 | DHCP가 최종적으로 승인을 내리고 네트워크 정보 임대, Broadcast/Unicast |
변환 | DHCP 서버가 DHCP Relay Agent로 유니캐스트를 보내면, 이를 수신한 DHCP Relay Agent는 브로드캐스트로 변환해서 단말로 전송 |
* Request Broadcast 이유: 모든 DHCP 서버들이 DHCP Offer 메시지를 보내면서 해당 단말에 할당해 줄 IP 주소와 기타 정보를 내부적으로 저장해 놓기 때문, 선택받지 못한 DHCP 서버들이 이 IP 주소와 기타 정보들을 삭제할 수 있도록 하기 위함
# apt-get install isc-dhcp-server
# vi /etc/dhcp/dhcpd.conf
# 해당 옵션 추가(network range)
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.20;
}
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.20;
}
# systemctl restart isc-dhcp-server
# ps -ef | grep dhcrelay
# apt-get install isc-dhcp-relay
# vi /etc/default/isc-dhcp-relay
SERVERS="192.168.0.1"
INTERFACES="eth0 eth1"
SERVERS: relay할 서버 설정, 여러개의 DHCP 서버로 relay 가능(space-seperated)
INTERFACES: relay service를 할 interface 설정, DHCP와 통신할 interface도 추가해야 하므로 2개 설정
# systemctl restart isc-dhcp-relay
# ps -ef | grep dhcrelay
gi-address
DHCP 패킷 테이블에 나열된 필드 중 하나
라우터 IP 주소, DHCP/BootP 릴레이 에이전트에 의해 채워지는 게이트웨이 IP 주소
DHCP server가 메시지에 대한 reply 패킷을 송신할 때, destination address를 'giaddr'로 사용
DHCP server가 DHCP Relay Agent로부터 DHCP 메시지를 수신하면, 메시지에 대한 reply를 giaddr(Gateway IP Address)로 보냄
부가 설명
Relay Agent가 request를 relay하기로 정했으면, 반드시 'giaddr' 필드를 검사해야 함
만약 'giaddr' 필드가 '0'이면, Relay Agent는 request를 'giaddr' 필드를 request를 수신한 인터페이스의 IP 주소로 채워야 함
즉, 'giaddr' 필드는 dhcrelay 데몬의 To client 인터페이스의 IP 주소가 됨
DHCP Server는 'giaddr'로 DHCP reply 패킷을 송신 → DHCP Server가 DHCP 메시지를 수신하지만, DHCP Relay Agent로 reply 패킷이 도달하지 않는다면 DA가 'giaddr'인 패킷을 수신할 수 있도록 네트워크를 변경해야 함
게이트웨이 주소(gi addr)에서 DHCP
DHCP: IP 주소 관리의 효율성과 편의를 위한 프로토콜
DHCP는 네트워크 내 개별 호스트 TCP/IP 통신을 실행하기 위한 IP 주소를 자동으로 할당(+ 구성 정보, ...)
단점: 서버와 클라이언트간 상호 인증 체계가 없음
-> DHCP spoofing, release 공격과 같은 네트워크 공격에 취약
취약점
DHCP Starvation
dhcpx -vv -i eth1 -A -D 10.10.10.50 -t 1
(축약) dhcpx -i eth1 -D 10.10.10.50
(eth1: 공격 보낼 network interface), 10.x.x.x: 공격 대상(DHCP 서버))
(DHCP pool 고갈 = IP 고갈)
대응
1) port security(switch 기술)(Client-Switch 사이)
특정 LAN 포트에서 허용할 MAC Address 지정(개수 포함)
발견 시 ① Protect(blocking) ② Restrict (blocking + trap message 관리자 전송) ③ Shutdown (위반 시 포트 차단 - 관리자 no shut 해제)
2) trusted port(DHCP Server-Switch 사이)
다른 포트에서 들어오는 DHCP 패킷이 감지되면, 패킷 버림 (물리적인 포트)
DHCP Spoofing
ettercap -i eth1 -T -M dhcp: 10.10.10.60 -150 / 255.255.255.0 / 10.10.10.50
(ettercap: LAN에 대한 메시지 가로채기 공격을 위한 보안 도구
IP 순서대로 (할당할 IP 대역 / 서브넷 마스크 / DNS Server)
참고: kali linux → dhcp server spoofing & starving attack
DHCP server의 취약점 판단하여 공격자가 DHCP 서버가 되어, 패킷 스푸핑
(DHCP 서버가 Default GW, DNS Server까지 할당 가능 → 공격자가 만든 서버 참조
참고 자료
유권정, 김은기, 네트워크 공격 방지를 지원하는 DHCP의 설계 및 구현에 관한 연구, 한국정보통신학회논문지
'Security & Analysis > Analysis' 카테고리의 다른 글
[Dreamhack] Reverse Engineering#1 - Computer Architecture (0) | 2023.12.11 |
---|---|
[ASCII Table] 아스키 코드표 (0) | 2023.01.12 |
[APK] 안드로이드 앱 난독화 해제 및 소스코드 분석 (0) | 2022.09.15 |
[APK 분석] 법무부 사칭 보이스피싱 악성코드 (0) | 2022.08.19 |
[NTP] DRDoS NTP 실습 (0) | 2022.07.22 |