1. 실습 목적
이번 실습은 크게 두 부분으로 진행한다.
첫 번째는 Rocky Linux의 Apache 웹서버에 /admin 페이지를 만들고 Basic Authentication(기본 인증)을 적용하는 것이다.
두 번째는 만들어진 웹서버를 대상으로 ARP Spoofing 실습을 수행한 뒤 Wireshark 등으로 ARP 패킷 2개를 캡처하여 분석하는 것이다.
실습 환경 예시는 다음과 같다.
Rocky Linux(Web Server)
IP : 192.168.11.17
Interface : ens160
Kali Linux(실습 공격 장비)
IP : 192.168.11.36
Interface : eth0
Gateway
IP : 192.168.11.1
2. Apache 설치 위치 확인
이번 Rocky Linux에는 일반적인 /var/www/html 구조의 Apache가 설치된 것이 아니다.
실제 Apache 위치는:
/app/apache
이다.
따라서 웹페이지 위치 역시:
/app/apache/htdocs
를 사용한다.
Apache 실행 파일은:
/app/apache/bin/apachectl
이며 Apache 설정 파일은:
/app/apache/conf/httpd.conf
이다.
이 때문에 다음 명령으로는:
rpm -q httpd
httpd 패키지가 설치되어 있지 않습니다
라고 나올 수 있다.
하지만 다음 명령으로 확인하면:
ss -ltnp | grep ':80'
LISTEN ... *:80 ... users:(("httpd"...))
처럼 실제 Apache가 실행 중인 것을 확인할 수 있다.
즉 RPM 패키지 방식이 아니라 /app/apache에 별도로 설치된 Apache라고 이해하면 된다.
3. Apache 인증 계정 생성
Apache Basic Authentication에서 사용할 계정을 만든다.
root 계정으로 작업한다.
su -
처음 인증 파일을 생성하면서 계정을 추가할 때:
/app/apache/bin/htpasswd -c /app/apache/.htpasswd sb5
비밀번호를 입력하면 된다.
여기서 중요한 옵션은:
-c
이다.
-c는 새로운 인증 파일을 만드는 옵션이기 때문에 처음 딱 한 번만 사용한다.
이미 .htpasswd가 존재하는 상황에서 -c를 다시 사용하면 기존 사용자 정보가 덮어써질 수 있다.
4. 두 번째 사용자부터는 -c 사용 금지
추가 계정을 생성하려면:
/app/apache/bin/htpasswd /app/apache/.htpasswd sa2
처럼 사용한다.
즉:
첫 번째 계정
htpasswd -c 인증파일 계정명
두 번째 이후
htpasswd 인증파일 계정명
으로 기억하면 된다.
5. .htpasswd 권한 설정
계정을 생성한 다음 인증 파일의 권한을 설정한다.
chmod 644 /app/apache/.htpasswd
확인:
ls -l /app/apache/.htpasswd
대략:
-rw-r--r--
형태가 나오면 된다.
인증 파일 내용을 확인하려면:
cat /app/apache/.htpasswd
예를 들면:
sb5:$apr1$....
sa2:$apr1$....
처럼 나오는데, 뒤에 있는 문자열은 비밀번호 자체가 아니라 암호화된 해시값이다.
6. 관리자 페이지 디렉터리 생성
인증을 적용할 /admin 디렉터리를 만든다.
mkdir -p /app/apache/htdocs/admin
테스트용 페이지도 만든다.
echo "Admin Page" > /app/apache/htdocs/admin/index.html
확인:
cat /app/apache/htdocs/admin/index.html
결과:
Admin Page
7. 웹 디렉터리 권한 설정
admin 디렉터리에 접근할 수 있도록 권한을 설정한다.
chmod 755 /app/apache/htdocs/admin
파일 권한:
chmod 644 /app/apache/htdocs/admin/index.html
인증 파일:
chmod 644 /app/apache/.htpasswd
확인:
ls -ld /app/apache/htdocs/admin
ls -l /app/apache/htdocs/admin/index.html
ls -l /app/apache/.htpasswd
8. Apache 설정 파일 수정
설정 파일을 연다.
vi /app/apache/conf/httpd.conf
파일 아래쪽 등에 다음 내용을 추가한다.
<Directory "/app/apache/htdocs/admin">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthType Basic
AuthName "Private Area"
AuthUserFile /app/apache/.htpasswd
Require valid-user
Satisfy All
</Directory>
각 설정의 의미는 다음과 같다.
<Directory>
→ 어느 디렉터리에 설정을 적용할 것인지 지정
AuthType Basic
→ HTTP Basic 인증 사용
AuthName "Private Area"
→ 로그인 창에 표시될 인증 영역 이름
AuthUserFile
→ ID와 비밀번호 정보가 저장되어 있는 파일
Require valid-user
→ .htpasswd에 등록된 정상 계정만 접근 가능
9. Apache 설정 문법 검사
수정했다고 바로 재시작하지 않는다.
먼저:
/app/apache/bin/apachectl configtest
를 실행한다.
정상이라면:
Syntax OK
가 나온다.
이게 매우 중요하다.
설정 파일에 오타가 있는데 바로 Apache를 재시작하면 웹서버가 올라오지 않을 수 있다.
따라서 항상:
설정 수정
↓
configtest
↓
Syntax OK 확인
↓
restart
순서로 진행한다.
10. Apache 재시작
설정이 정상이라면:
/app/apache/bin/apachectl restart
실행 상태 확인:
ps -ef | grep httpd
또는:
ss -ltnp | grep ':80'
httpd 프로세스가 여러 개 나타나는 것은 Apache 구조상 정상이다.
11. 브라우저에서 인증 테스트
브라우저에서:
http://192.168.11.17/admin/
에 접속한다.
정상적으로 설정되었다면 바로 Admin Page가 표시되는 것이 아니라 먼저 사용자 이름 / 비밀번호 로그인 창이 나타난다.
앞에서 만든:
ID : sb5
Password : 설정한 비밀번호
를 입력한다.
인증 성공 후:
Admin Page
가 보이면 Apache 인증 설정 성공이다.
12. 여기까지의 전체 흐름
Apache Web Server
192.168.11.17
↓
/app/apache/htdocs/admin
↓
HTTP Basic Authentication
↓
.htpasswd 확인
↓
로그인 성공
↓
Admin Page 접근
13. 이후 ARP Spoofing 실습
이제 위에서 만든:
192.168.11.17
웹서버를 대상으로 실습망에서 ARP Spoofing을 수행한다.
ARP Spoofing의 핵심은 공격 장비가 자신의 MAC 주소를 다른 IP의 MAC 주소인 것처럼 속이는 것이다.
정상적인 ARP 정보가 예를 들어:
192.168.11.1 → AA:AA:AA:AA:AA:AA
192.168.11.17 → BB:BB:BB:BB:BB:BB
였다면 공격 과정에서:
192.168.11.1 → CC:CC:CC:CC:CC:CC
192.168.11.17 → CC:CC:CC:CC:CC:CC
처럼 서로 다른 IP에 대해 같은 공격자의 MAC 주소가 전달되는 현상을 관찰할 수 있다.
14. 왜 ARP 패킷을 2개 캡처하는가?
이번 평가에서 중요한 부분이다.
ARP Spoofing 패킷 하나만 보면:
IP = ????
MAC = 공격자 MAC
이라는 사실만 확인할 수 있다.
하지만 이것만으로는 그 MAC 주소가 정말 잘못된 것인지 비교하기 어렵다.
두 개의 ARP 패킷을 비교하면:
Packet 1
Source IP = A
Source MAC = CC:CC:CC:CC:CC:CC
Packet 2
Source IP = B
Source MAC = CC:CC:CC:CC:CC:CC
처럼 서로 다른 IP 주소가 동일한 MAC 주소를 자신의 MAC이라고 알리고 있는 현상을 확인할 수 있다.
그래서 과제에서 패킷 두 개를 제출하라고 하는 것이다.
15. ARP 패킷 분석 양식
패킷 1은 다음처럼 정리한다.
[ARP Packet - 1]
Ethernet
============================
Destination MAC Address :
Source MAC Address :
Type :
ARP
============================
Hardware Type :
Protocol Type :
Hardware Length :
Protocol Length :
Operation :
Source MAC Address :
Source IP Address :
Destination MAC Address :
Destination IP Address :
패킷 2 역시 동일하게 작성한다.
[ARP Packet - 2]
Ethernet
============================
Destination MAC Address :
Source MAC Address :
Type :
ARP
============================
Hardware Type :
Protocol Type :
Hardware Length :
Protocol Length :
Operation :
Source MAC Address :
Source IP Address :
Destination MAC Address :
Destination IP Address :
16. 여기서 자료에 하나 주의할 점
네가 받은 양식에:
Ethernet Type (2 byte) : 08 00
이라고 되어 있는데 ARP 패킷을 분석하는 것이라면 이 부분은 확인이 필요하다.
Ethernet II에서:
IPv4 = 0x0800
ARP = 0x0806
이다.
즉 ARP 패킷이라면 일반적으로 Ethernet Type은:
08 06
이 되어야 한다.
반면 ARP 내부의:
Protocol Type
은 IPv4를 의미하므로:
08 00
이 된다.
정리하면:
Ethernet Type = 08 06 → ARP
ARP Protocol Type = 08 00 → IPv4
이 부분은 평가 작성할 때 실제 Wireshark 패킷 원본을 보고 적는 게 가장 정확하다.
17. 일반적인 ARP 필드 값
일반 Ethernet + IPv4 ARP 패킷이라면 대부분:
Hardware Type
00 01
= Ethernet
Protocol Type
08 00
= IPv4
Hardware Length
06
= MAC 주소 6 byte
Protocol Length
04
= IPv4 주소 4 byte
가 된다.
Operation은 패킷에 따라:
00 01 = ARP Request
00 02 = ARP Reply
이다.
18. 패킷 분석 결론 작성 예시
과제 마지막에는 이런 식으로 정리하면 깔끔하다.
두 ARP 패킷을 분석한 결과 서로 다른 Source IP Address를 가지고 있음에도 동일한 Source MAC Address가 사용되고 있음을 확인하였다. 정상적인 환경에서는 각 장비의 IP 주소에 대응하는 고유 MAC 주소가 존재해야 하지만, 공격 과정에서는 공격자의 MAC 주소가 다른 장비의 IP 주소에 대응하는 것처럼 전달되었다. 따라서 해당 패킷을 통해 ARP Spoofing이 수행되고 있음을 확인할 수 있다.
실제 제출할 때는 Source IP, Source MAC 등을 네가 캡처한 값으로 넣어주는 게 더 좋다.
19. 같이 전달받은 firewalld rule은 무엇인가?
네가 받은:
rule family="ipv4" source address="61.255.192.116" ...
rule family="ipv4" source address="220.117.108.166" ...
...
rule family="ipv4" source address="210.221.44.107"
log prefix="ast16_임성민_210.221.44.107"
accept
이 부분은 ARP Spoofing 패킷 분석용 데이터는 아니다.
형태를 보면 Rocky Linux firewalld의 Rich Rule(방화벽 허용 규칙)에 가깝다.
예를 들어:
source address="210.221.44.107"
은:
210.221.44.107에서 들어오는 IPv4 통신을 대상으로 한다.
는 의미이고,
accept
은:
해당 통신을 허용한다.
는 의미다.
그리고:
log prefix="ast16_임성민_210.221.44.107"
는 방화벽 로그가 남을 때 식별하기 쉽게 앞에 붙이는 문자다.
따라서 이 내용은 아마 각 교육생 외부 IP를 서버 방화벽에서 허용하기 위한 규칙을 공유받은 것으로 보인다.
이번 Apache Basic 인증이나 ARP 패킷 분석의 핵심 명령은 아니므로, 강사가 별도로 방화벽 설정을 요구하지 않았다면 블로그에서는 참고: 원격 접속 허용용 firewalld Rich Rule 정도로 분리해 두는 게 좋다.
평가 제출용 핵심 체크리스트
- /app/apache/.htpasswd 생성
- Apache 인증 계정 등록
- /app/apache/htdocs/admin 생성
- admin/index.html 생성
- httpd.conf에 Basic Authentication 설정
- apachectl configtest → Syntax OK
- Apache restart
- http://192.168.11.17/admin/ 접속
- 로그인 창 확인
- ARP Spoofing 실습
- ARP 관련 패킷 2개 캡처
- Ethernet + ARP Header 각각 분석
- 서로 다른 IP가 동일한 MAC을 가리키는지 비교
- 분석 결과 및 ARP Spoofing 판단 작성