Różnice między wybraną wersją a wersją aktualną.
Poprzednia rewizja po obu stronachPoprzednia wersjaNowa wersja | Poprzednia wersja | ||
notatki:ftp_bruteforce [2025/06/19 16:31] – administrator | notatki:ftp_bruteforce [2025/06/19 20:09] (aktualna) – administrator | ||
---|---|---|---|
Linia 1: | Linia 1: | ||
- | ====== FTP Bruteforce (Patator i CICFlowMeter) ====== | + | ====== |
===== Schemat i opis środowiska testowego ===== | ===== Schemat i opis środowiska testowego ===== | ||
Linia 15: | Linia 15: | ||
Każda z Maszyn ma dysk o rozmiarze 8GB ([[https:// | Każda z Maszyn ma dysk o rozmiarze 8GB ([[https:// | ||
- | Dyski maszyn można pobrać z linków | + | Dyski maszyn można pobrać z linka poniżej: |
+ | https:// | ||
+ | Hasło do linka: '' | ||
===== Oprogramowanie wykorzystane do wykonania eksperymentu ===== | ===== Oprogramowanie wykorzystane do wykonania eksperymentu ===== | ||
- | ^ Komponent | + | ^ Komponent |
- | | System operacyjny maszyn wirtualnych | + | | System operacyjny maszyn wirtualnych |
- | | Hypervisor | + | | Hypervisor |
- | | Serwer FTP | 3.0.3 | + | | Serwer FTP | 3.0.5 |
- | | Narzędzie ataku | + | | Narzędzie ataku |
- | | Przechwytywanie ruchu | 4.99.1 | + | | Przechwytywanie ruchu | 4.99.1 |
- | | Analiza Ruchu | 4.0 | CICFlowMeter | + | | Analiza Ruchu |
+ | | Słownik do ataku | ok. 14 MB, 14344392 haseł | ||
====== Instalacja i konfiguracja ====== | ====== Instalacja i konfiguracja ====== | ||
Linia 33: | Linia 35: | ||
<code bash> | <code bash> | ||
- | sudo apt update | + | administrator@target: |
- | sudo apt install vsftpd -y | + | [sudo] password for administrator: |
+ | Hit:1 http:// | ||
+ | Hit:2 http:// | ||
+ | Hit:3 http:// | ||
+ | Hit:4 http:// | ||
+ | Reading package lists... Done | ||
+ | Building dependency tree... Done | ||
+ | Reading state information... Done | ||
+ | 58 packages can be upgraded. Run 'apt list --upgradable' | ||
+ | administrator@target: | ||
+ | [LOGI Z INSTALACJI] | ||
</ | </ | ||
- | Plik konfiguracyjny | + | Zmiany w pliku konfiguracyjnym |
<code bash> | <code bash> | ||
anonymous_enable=NO | anonymous_enable=NO | ||
Linia 46: | Linia 58: | ||
</ | </ | ||
- | Tworzenie użytkownika FTP:\\ | + | Tworzenie użytkownika FTP z hasłem '' |
<code bash> | <code bash> | ||
- | sudo adduser ftpuser | + | administrator@target: |
- | sudo passwd ftpuser | + | info: Adding user `ftpuser' |
+ | info: Selecting UID/GID from range 1000 to 59999 ... | ||
+ | info: Adding new group `ftpuser' | ||
+ | info: Adding new user `ftpuser' | ||
+ | info: Creating home directory `/ | ||
+ | info: Copying files from `/ | ||
+ | New password: | ||
+ | Retype new password: | ||
+ | passwd: password updated successfully | ||
+ | Changing the user information for ftpuser | ||
+ | Enter the new value, or press ENTER for the default | ||
+ | Full Name []: | ||
+ | Room Number []: | ||
+ | Work Phone []: | ||
+ | Home Phone []: | ||
+ | Other []: | ||
+ | Is the information correct? [Y/n] y | ||
+ | info: Adding new user `ftpuser' | ||
+ | info: Adding user `ftpuser' | ||
+ | administrator@target: | ||
</ | </ | ||
Restart usługi:\\ | Restart usługi:\\ | ||
<code bash> | <code bash> | ||
- | sudo systemctl restart vsftpd | + | administrator@target: |
+ | administrator@target: | ||
+ | ● vsftpd.service - vsftpd FTP server | ||
+ | | ||
+ | | ||
+ | Process: 4065 ExecStartPre=/ | ||
+ | Main PID: 4068 (vsftpd) | ||
+ | Tasks: 1 (limit: 4602) | ||
+ | | ||
+ | CPU: 7ms | ||
+ | | ||
+ | | ||
+ | |||
+ | Jun 19 15:00:47 target systemd[1]: Starting vsftpd.service - vsftpd FTP server.> | ||
+ | Jun 19 15:00:47 target systemd[1]: Started vsftpd.service - vsftpd FTP server. | ||
+ | administrator@target: | ||
</ | </ | ||
Linia 61: | Linia 107: | ||
Instalacja Narzędzi: | Instalacja Narzędzi: | ||
<code bash> | <code bash> | ||
- | sudo apt update | + | administrator@attacker: |
- | sudo apt install git python3-pip tcpdump -y | + | [sudo] password for administrator: |
+ | Hit:1 http:// | ||
+ | Hit:2 http:// | ||
+ | Hit:3 http:// | ||
+ | Hit:4 http:// | ||
+ | Reading package lists... Done | ||
+ | Building dependency tree... Done | ||
+ | Reading state information... Done | ||
+ | 58 packages can be upgraded. Run 'apt list --upgradable' | ||
+ | administrator@attacker: | ||
+ | [TUTAJ LOGI Z INSTALACJI] | ||
</ | </ | ||
+ | Przed instalacją patatora dodano repozytoria kali-linux do ubuntu.\\ | ||
Instalacja Patatora:\\ | Instalacja Patatora:\\ | ||
<code bash> | <code bash> | ||
- | git clone https:// | + | administrator@attacker:~$ sudo apt install |
- | cd patator | + | [TUTAJ LOGI Z INSTALACJI] |
- | pip install -r requirements.txt | + | |
</ | </ | ||
Instalacja CICFlowMeter w wersji Python:\\ | Instalacja CICFlowMeter w wersji Python:\\ | ||
<code bash> | <code bash> | ||
- | cd ~ | + | administrator@attacker: |
- | git clone https:// | + | [TUTAJ LOGI Z INSTALACJI] |
- | cd CICFlowMeter | + | </ |
- | pip install | + | |
+ | Pobranie słownika do ataku:\\ | ||
+ | <code bash> | ||
+ | administrator@attacker: | ||
+ | --2025-06-19 15: | ||
+ | Resolving github.com (github.com)... 140.82.121.3 | ||
+ | Connecting to github.com (github.com)|140.82.121.3|: | ||
+ | HTTP request sent, awaiting response... 302 Found | ||
+ | Location: https:// | ||
+ | --2025-06-19 15: | ||
+ | Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, | ||
+ | Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|: | ||
+ | HTTP request sent, awaiting response... 200 OK | ||
+ | Length: 53291283 (51M) [application/ | ||
+ | Saving to: ‘rockyou.txt.tar.gz’ | ||
+ | |||
+ | rockyou.txt.tar.gz | ||
+ | |||
+ | 2025-06-19 15:19:48 (1.59 MB/s) - ‘rockyou.txt.tar.gz’ saved [53291283/ | ||
+ | |||
+ | administrator@attacker: | ||
+ | administrator@attacker: | ||
+ | 14344391 rockyou.txt | ||
+ | administrator@attacker: | ||
+ | 123456 | ||
+ | 12345 | ||
+ | 123456789 | ||
+ | password | ||
+ | iloveyou | ||
+ | princess | ||
+ | 1234567 | ||
+ | rockyou | ||
+ | 12345678 | ||
+ | abc123 | ||
+ | </ | ||
+ | |||
+ | ====== Test Komunikacji ====== | ||
+ | Ping:\\ | ||
+ | <code bash> | ||
+ | administrator@target: | ||
+ | PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data. | ||
+ | 64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=0.180 ms | ||
+ | 64 bytes from 10.10.10.2: icmp_seq=2 ttl=64 time=0.229 ms | ||
+ | 64 bytes from 10.10.10.2: icmp_seq=3 ttl=64 time=0.269 ms | ||
+ | 64 bytes from 10.10.10.2: icmp_seq=4 ttl=64 time=0.286 ms | ||
+ | 64 bytes from 10.10.10.2: icmp_seq=5 ttl=64 time=0.266 ms | ||
+ | 64 bytes from 10.10.10.2: icmp_seq=6 ttl=64 time=0.293 ms | ||
+ | 64 bytes from 10.10.10.2: icmp_seq=7 ttl=64 time=0.284 ms | ||
+ | ^C | ||
+ | --- 10.10.10.2 ping statistics --- | ||
+ | 7 packets transmitted, | ||
+ | rtt min/ | ||
+ | administrator@target: | ||
+ | </ | ||
+ | FTP:\\ | ||
+ | <code bash> | ||
+ | administrator@attacker: | ||
+ | Connected to 10.10.10.1. | ||
+ | 220 (vsFTPd 3.0.5) | ||
+ | Name (10.10.10.1: | ||
+ | 331 Please specify the password. | ||
+ | Password: | ||
+ | 230 Login successful. | ||
+ | Remote system type is UNIX. | ||
+ | Using binary mode to transfer files. | ||
+ | ftp> dir | ||
+ | 229 Entering Extended Passive Mode (|||8296|) | ||
+ | 150 Here comes the directory listing. | ||
+ | 226 Directory send OK. | ||
+ | ftp> | ||
</ | </ | ||
====== Przeprowadzenie Ataku ====== | ====== Przeprowadzenie Ataku ====== | ||
+ | W jednej sesji terminala uruchomienie przechwytywania: | ||
+ | <code bash> | ||
+ | sudo tcpdump -i eth1 port 21 -w ftp_attack.pcap | ||
+ | </ | ||
+ | |||
+ | W drugiej sesji terminala atak Patator:\\ | ||
+ | <code bash> | ||
+ | administrator@attacker: | ||
+ | 15:39:45 patator | ||
+ | 15:39:45 patator | ||
+ | 15:39:45 patator | ||
+ | 15:39:45 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | 15:40:38 patator | ||
+ | [TUTAJ CIĄGNIE SIĘ DALEJ] | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | W tym przypadku atak się nie powiedzie, ponieważ utworzone hasło nie znajduje się w rockyou.txt – i o to właśnie chodzi: chodzi o symulację nieudanego ataku, który będzie wyraźnie widoczny w ruchu. | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Efekty Ataku ====== | ||
+ | |||
+ | ===== Po stronie atakującej ===== | ||
+ | |||
+ | * Konsola Patatora wykaże tysiące nieudanych prób. | ||
+ | * Hasło nie zostanie złamane. | ||
+ | * Cały ruch jest zapisany w ftp_attack.pcap. | ||
+ | |||
+ | ===== Po stronie serwera FTP ===== | ||
+ | |||
+ | Fragment logu z / | ||
+ | <code yaml> | ||
+ | administrator@target: | ||
+ | [sudo] password for administrator: | ||
+ | Thu Jun 19 15:27:39 2025 [pid 6752] CONNECT: Client " | ||
+ | Thu Jun 19 15:27:50 2025 [pid 6751] [ftpuser] OK LOGIN: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7001] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7003] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7005] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7007] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7009] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7011] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7013] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7015] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7017] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:35 2025 [pid 7019] CONNECT: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7000] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7006] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7002] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7008] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7004] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7014] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7012] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7010] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7016] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:40:37 2025 [pid 7018] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7006] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7000] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7008] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7002] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7012] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7014] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7004] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7010] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7016] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:41:30 2025 [pid 7018] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7006] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7008] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7002] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7000] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7012] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7010] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7004] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7014] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7018] [ftpuser] FAIL LOGIN: Client " | ||
+ | Thu Jun 19 15:42:23 2025 [pid 7016] [ftpuser] FAIL LOGIN: Client " | ||
+ | [TUTAJ CIĄGNIE SIĘ DALEJ] | ||
+ | </ | ||
+ | |||
+ | Pełna wersja logów do pobrania {{: | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Po 765 próbach (~122min) zatrzymano eksperyment | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Użycie CICFlowMeter (Python) i ekstrakcja cech ====== | ||
+ | |||
+ | <code bash> | ||
+ | administrator@attacker: | ||
+ | reading from file ftp_attack.pcap, | ||
+ | administrator@attacker: | ||
+ | total 186M | ||
+ | drwxr-x--- 7 administrator administrator 4.0K Jun 19 17:16 . | ||
+ | drwxr-xr-x 3 root root 4.0K Jun 19 15:07 .. | ||
+ | -rw------- 1 administrator administrator 1.1K Jun 19 15:25 .bash_history | ||
+ | -rw-r--r-- 1 administrator administrator | ||
+ | -rw-r--r-- 1 administrator administrator 3.7K Mar 31 2024 .bashrc | ||
+ | drwx------ 4 administrator administrator 4.0K Jun 19 17:15 .cache | ||
+ | drwx------ 2 administrator administrator 4.0K Jun 19 17:15 .config | ||
+ | -rw-rw-r-- 1 administrator administrator 263K Jun 19 17:16 ftp_attack.csv | ||
+ | -rw-r--r-- 1 tcpdump | ||
+ | drwxrwxr-x 7 administrator administrator 4.0K Jun 19 15:13 patator | ||
+ | -rw-r--r-- 1 administrator administrator | ||
+ | -rw------- 1 administrator administrator 134M Sep 23 2015 rockyou.txt | ||
+ | -rw-rw-r-- 1 administrator administrator | ||
+ | drwx------ 2 administrator administrator 4.0K Jun 19 15:07 .ssh | ||
+ | -rw-r--r-- 1 administrator administrator | ||
+ | drwxrwxr-x 6 administrator administrator 4.0K Jun 19 15:16 venv_patator | ||
+ | -rw-rw-r-- 1 administrator administrator | ||
+ | -rw------- 1 administrator administrator | ||
+ | administrator@attacker: | ||
+ | src_ip, | ||
+ | 10.10.10.1, | ||
+ | [I TAK DALEJ] | ||
+ | </ | ||
+ | |||
+ | |||
+ | Wynik przechwytywania do pobrania {{: | ||
+ | |||
+ | Wynik ekstrakcji cech do pobrania {{: | ||
+ | |||
+ | ===== Kluczowe cechy wyniku (Analiza pierwszego wiersza CSV) ===== | ||
+ | |||
+ | < | ||
+ | src_ip=10.10.10.1, | ||
+ | flow_duration=103.3 s | ||
+ | tot_fwd_pkts=10, | ||
+ | flow_byts_s ≈ 12.13 B/s, flow_pkts_s ≈ 0.165 pkt/ | ||
+ | pkt_len_mean ≈ 73.7 B | ||
+ | flow_iat_mean ≈ 16.47 s | ||
+ | bwd_blk_rate_avg ≈ 0.7 (ilość pakietów w tył do przodu) | ||
+ | </ | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ===== Uproszczona sygnatura ataku ===== | ||
+ | |||
+ | Poniżej prosty skrypt wizualizujący dane wyjściowe z programu CICFlowMeter: | ||
+ | <code python signature_grapher.py> | ||
+ | import pandas as pd | ||
+ | import matplotlib.pyplot as plt | ||
+ | |||
+ | # Wczytanie danych z pliku CSV | ||
+ | df = pd.read_csv(' | ||
+ | |||
+ | # Wybór interesujących cech | ||
+ | features = [' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | df_selected = df[features] | ||
+ | |||
+ | # Normalizacja danych (opcjonalnie) | ||
+ | df_normalized = (df_selected - df_selected.mean()) / df_selected.std() | ||
+ | |||
+ | # Wizualizacja | ||
+ | plt.figure(figsize=(12, | ||
+ | for feature in df_normalized.columns: | ||
+ | plt.plot(df_normalized.index, | ||
+ | plt.title(' | ||
+ | plt.xlabel(' | ||
+ | plt.ylabel(' | ||
+ | plt.legend() | ||
+ | plt.grid(True) | ||
+ | plt.show() | ||
+ | </ | ||
+ | |||
+ | {{.: | ||
+ | |||
+ | ====== Wnioski ====== | ||
+ | * Skuteczność ataku brute-force zależy od słownika – jeśli hasło użytkownika nie jest w słowniku, atak się nie powiedzie, choć nadal generuje duży ruch i może zostać wykryty. | ||
+ | * Monitorowanie logów serwera FTP jest kluczowe – logi wyraźnie pokazują wielokrotne, | ||
+ | * Przechwytywanie i analiza ruchu (tcpdump + CICFlowMeter) – umożliwiają szczegółową analizę zachowania sieci podczas ataku, co może być wykorzystane do budowy systemów wykrywania włamań (IDS). | ||
+ | * Ograniczenie szybkości ataku (--rate-limit=50) – jest istotne, aby nie przeciążyć serwera i lepiej symulować realistyczne warunki ataku. | ||
+ | * Silne, losowe hasło zabezpiecza konto – stosowanie silnych haseł, które nie występują w popularnych słownikach, | ||
+ | * Środowisko testowe oparte na VM i Hyper-V – pozwala na bezpieczne i kontrolowane przeprowadzanie eksperymentów bezpieczeństwa. |