113 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{#include ../../banners/hacktricks-training.md}}
# IPv6 기본 이론
## 네트워크
IPv6 주소는 네트워크 조직 및 장치 상호작용을 향상시키기 위해 구조화되어 있습니다. IPv6 주소는 다음과 같이 나뉩니다:
1. **네트워크 접두사**: 네트워크 세그먼트를 결정하는 처음 48비트.
2. **서브넷 ID**: 네트워크 내 특정 서브넷을 정의하는 데 사용되는 다음 16비트.
3. **인터페이스 식별자**: 서브넷 내에서 장치를 고유하게 식별하는 마지막 64비트.
IPv6는 IPv4에서 발견되는 ARP 프로토콜을 생략하지만, 두 가지 주요 메시지를 가진 **ICMPv6**를 도입합니다:
- **이웃 요청 (NS)**: 주소 해결을 위한 멀티캐스트 메시지.
- **이웃 광고 (NA)**: NS에 대한 유니캐스트 응답 또는 자발적인 발표.
IPv6는 또한 특별한 주소 유형을 포함합니다:
- **루프백 주소 (`::1`)**: IPv4의 `127.0.0.1`과 동등하며, 호스트 내에서의 내부 통신을 위해 사용됩니다.
- **링크-로컬 주소 (`FE80::/10`)**: 로컬 네트워크 활동을 위한 것으로, 인터넷 라우팅에는 사용되지 않습니다. 동일한 로컬 네트워크에 있는 장치들은 이 범위를 사용하여 서로를 발견할 수 있습니다.
### 네트워크 명령에서의 IPv6 실용 사용
IPv6 네트워크와 상호작용하기 위해 다양한 명령을 사용할 수 있습니다:
- **링크-로컬 주소 핑**: `ping6`를 사용하여 로컬 장치의 존재를 확인합니다.
- **이웃 발견**: `ip neigh`를 사용하여 링크 계층에서 발견된 장치를 봅니다.
- **alive6**: 동일한 네트워크에서 장치를 발견하기 위한 대체 도구입니다.
아래는 몇 가지 명령 예시입니다:
```bash
ping6 I eth0 -c 5 ff02::1 > /dev/null 2>&1
ip neigh | grep ^fe80
# Alternatively, use alive6 for neighbor discovery
alive6 eth0
```
IPv6 주소는 로컬 통신을 위해 장치의 MAC 주소에서 파생될 수 있습니다. 다음은 알려진 MAC 주소에서 Link-local IPv6 주소를 파생하는 방법에 대한 간단한 가이드와 네트워크 내에서 IPv6 주소를 발견하는 방법 및 IPv6 주소 유형에 대한 간략한 개요입니다.
## **MAC 주소에서 Link-local IPv6 파생하기**
MAC 주소 **`12:34:56:78:9a:bc`**가 주어지면, Link-local IPv6 주소를 다음과 같이 구성할 수 있습니다:
1. MAC을 IPv6 형식으로 변환: **`1234:5678:9abc`**
2. `fe80::`를 앞에 붙이고 중간에 `fffe`를 삽입: **`fe80::1234:56ff:fe78:9abc`**
3. 왼쪽에서 일곱 번째 비트를 반전시켜 `1234``1034`로 변경: **`fe80::1034:56ff:fe78:9abc`**
## **IPv6 주소 유형**
- **Unique Local Address (ULA)**: 로컬 통신을 위한 것으로, 공용 인터넷 라우팅을 위한 것이 아님. 접두사: **`FEC00::/7`**
- **Multicast Address**: 일대다 통신을 위한 것. 멀티캐스트 그룹의 모든 인터페이스에 전달됨. 접두사: **`FF00::/8`**
- **Anycast Address**: 일대가장 가까운 통신을 위한 것. 라우팅 프로토콜에 따라 가장 가까운 인터페이스로 전송됨. **`2000::/3`** 글로벌 유니캐스트 범위의 일부.
## **주소 접두사**
- **fe80::/10**: Link-Local 주소 (169.254.x.x와 유사)
- **fc00::/7**: Unique Local-Unicast (10.x.x.x, 172.16.x.x, 192.168.x.x와 같은 사설 IPv4 범위와 유사)
- **2000::/3**: Global Unicast
- **ff02::1**: Multicast All Nodes
- **ff02::2**: Multicast Router Nodes
## **네트워크 내에서 IPv6 주소 발견하기**
### 방법 1: Link-local 주소 사용
1. 네트워크 내 장치의 MAC 주소를 얻습니다.
2. MAC 주소에서 Link-local IPv6 주소를 파생합니다.
### 방법 2: Multicast 사용
1. 멀티캐스트 주소 `ff02::1`에 핑을 보내 로컬 네트워크에서 IPv6 주소를 발견합니다.
```bash
service ufw stop # Stop the firewall
ping6 -I <IFACE> ff02::1 # Send a ping to multicast address
ip -6 neigh # Display the neighbor table
```
## IPv6 Man-in-the-Middle (MitM) Attacks
IPv6 네트워크에서 MitM 공격을 실행하기 위한 여러 기술이 존재합니다. 예를 들어:
- ICMPv6 이웃 또는 라우터 광고 스푸핑.
- ICMPv6 리디렉션 또는 "패킷이 너무 큽니다" 메시지를 사용하여 라우팅 조작.
- 모바일 IPv6 공격 (일반적으로 IPSec 비활성화 필요).
- 악성 DHCPv6 서버 설정.
# Identifying IPv6 Addresses in the eild
## Exploring Subdomains
IPv6 주소와 잠재적으로 연결된 서브도메인을 찾는 방법은 검색 엔진을 활용하는 것입니다. 예를 들어, `ipv6.*`와 같은 쿼리 패턴을 사용하는 것이 효과적일 수 있습니다. 구체적으로, 다음 검색 명령을 Google에서 사용할 수 있습니다:
```bash
site:ipv6./
```
## DNS 쿼리 활용
IPv6 주소를 식별하기 위해 특정 DNS 레코드 유형을 쿼리할 수 있습니다:
- **AXFR**: 전체 존 전송을 요청하여 다양한 DNS 레코드를 발견할 수 있습니다.
- **AAAA**: IPv6 주소를 직접적으로 찾습니다.
- **ANY**: 사용 가능한 모든 DNS 레코드를 반환하는 광범위한 쿼리입니다.
## Ping6로 탐색하기
조직과 관련된 IPv6 주소를 확인한 후, `ping6` 유틸리티를 사용하여 탐색할 수 있습니다. 이 도구는 식별된 IPv6 주소의 응답성을 평가하는 데 도움이 되며, 인접한 IPv6 장치를 발견하는 데도 도움이 될 수 있습니다.
## 참고 문헌
- [http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html](http://www.firewall.cx/networking-topics/protocols/877-ipv6-subnetting-how-to-subnet-ipv6.html)
- [https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904](https://www.sans.org/reading-room/whitepapers/detection/complete-guide-ipv6-attack-defense-33904)
{{#include ../../banners/hacktricks-training.md}}