Igen sok rövidítés került a címbe. Ezek egy része algoritmus, más része hash függvény vagy protokoll. A teljesség igénye nélkül vegyük sorra őket, hiszen ezekkel találkozhatunk a mindennapi életben.
A DES (Data Encryption Standard) illetve a Triple DES és az AES (Advanced Encryption Standard) ún. szimmetrikus kulcsú vagy “titkos kulcsú” algoritmusok. Ez azt jelenti, hogy minden félnek ismernie kell a kulcsot, mind a titkosításhoz, mind a dekódoláshoz. Ez a fő hibájuk egyébként. A DES már történelem. Több mint 20 éve feltörték. 🙂 Az AES algoritmus a WPA2-ben (Wi-Fi Protected Access) használatos, még ma is biztonságosan működik. A Blowfish pedig az egyik első biztonságos blokk-kódoló – szimmetrikus – algoritmus. Ma már az AES népszerűbb.
Vannak az előzőekkel szemben az ún aszimmetrikus kulcsú vagyis nyilvános kulcsú titkosító algoritmusok. Ez a korszerű és a biztonságos(abb) egyébként. Itt kulcspárt generálunk, és a fogadó fél a privát kulcsommal kódolt üzenetemet a rendelkezésére bocsájtott nyilvános kulcsommal tudja elolvasni, és vica versa. Ilyen megoldások az RSA (Rivest–Shamir–Adleman) és a DSA (Digital Signature Algorithm) algoritmusok. Az RSA széles körben elterjedt titkosított adatátvitelhez.
Aztán nézzük meg az MD4-et illetve az MD5-öt (Message-Digest algorithm 5). Ezek egyirányú kódoló algoritmusok. Mára elavultak, ezért az SHA-2 (Secure Hash Algorithm 2) váltotta ki őket. Linux alatt a jelszók kódolására használják ezt a fajta titkosítást. Csak azt lehet ellenőrizni, hogy a két kódolt karaktersorozat egyezik-e, ezért nem lehet egy elfelejtett jelszót “megmondani”. 🙂 A bitcoin kriptovaluta pl. a SHA-2 családba tartozó SHA-256 kriptografikus hash függvényt használja többek között blokk-láncai kódolásához is. A hash függvény matematikai fogalom, egy értékkészletet képez le egy szignifikánsan (jelentősen) kisebb értéktartományra.
És akkor még itt van az RC4 (Rivest Cipher 4). Ez folyam kódoló, de sajnos olyan törhető titkosításokhoz használták, mint a WEP (Wired Equivalent Privacy). Ezt ma már nem használjuk még véletlenül sem. Volt még ilyen gyermekbetegség-kódolás, a TKIP (Temporal Key Integrity Protocol). Azt sem fejlesztették tovább. 🙂
A TSL-t az a bizonyos “https://” kezdetű rész használja a böngészőnkben a weszerverrel való kommunikációban – fontos eleme a “kézfogás” (handshaking) -, a PGP pedig egy titkos levelezésnél hasznos. 🙂
Egy informatikai biztonsággal foglalkozó kollégám mondta egyszer nekem, hogy informatikai biztonság nem létezik. Csak a vasbeton trezorban a konnektorból is kihúzott számítógép, fegyveres őrrel az ajtóban. És valóban. Mit ér mindez, ha a felhasználó hibájából van a notebook-ban egy cetli a jelszóval. 🙂
Telepítettem a napokban régi jó szoftvercsomagomat, az nmap-et is. Beszéltünk róla, hogy Linux alatt 0-65535-ig (2^16-1) számozottak a portok. Egy port lehet TCP (Transmission Control Protocol – kapcsolatorientált, byte-stream jellegû, megbízható protokoll, pl. “on-demand” kép- és hangátvitel, letöltés, mivel a TCP egy megbízható protokoll, újra küldi az “elveszett” csomagokat) vagy UDP (User Datagram Protocol – összeköttetésmentes protokoll, pl. élő kép- és hangátvitel, online játékok – hibaellenőrzés és csomag újraküldés nélküli “kis adatcsomagocskák”).
Miután kapcsolódtunk a böngészőnkkel pl. a HTTP 80-as szerverportra, egy ún. “socket” nyílik a szerveren, és a kliens egy 1024-nél magasabb portszámmal kapcsolódik. Ez minden hálózati szolgáltatásnál ugyanígy működik.
Felmerülhet a kérdés, hogy mennyi kliens-szerver kapcsolat lehetséges. Egy kliens max. 65535 kapcsolatot nyithat egy szerverre, de egy szerver 65535 kapcsolatot tarthat fent kliensenként! Határ a memória és a cpu! 🙂
Az alábbiakban egy nem teljeskörű lista látható az alapvető Linux (UNIX) portokról. Az 1024-nél alacsonyabb portszámok a root (rendszergazda) felhasználóhoz kötöttek. A portok többsége TCP.
20 – FTP Data (FTP adatátvitel) 21 – FTP Control (FTP kapcsolat indítása) 22 – SSH (biztonságos távoli adminisztráció, SSL-lel kódolt csatornán) 23 – Telnet (kódolatlan távoli adminisztráció) 25 – SMTP (Mail Transfer Agent, e-mail szerver, mint pl. SEND mail) 53 – DNS (TCP és UDP is) 67 – Bootp 68 – DHCP 69 – TFTP (Trivial file transfer protocol, UDP, "kapcsolat nélküli" adatátvitel) 80 – HTTP/WWW(Apache) 88 – Kerberos 110 – POP3 (Mail delivery Agent) 123 – NTP (Network time protocol idő szinkronizálásra, UDP) 137 – NetBIOS (nmbd) 139 – SMB-Samba (smbd) 143 – IMAP 161 – SNMP (hálózatfelügyelet) 389 – LDAP (központi adminisztráció) 443 – HTTPS (HTTP+SSL biztonságos web elérés) 514 – Syslogd (UDP port) 636 – ldaps (TCP és UDP is) 873 – rsync 989 – FTPS-data 990 – FTPS 993 – IMAPS 1194 – openVPN 1812 – RADIUS 995 – POP3s 2049 – NFS (nfsd, rpc.nfsd, rpc, portmap) 2401 – CVS server 3306 – MySql 3690 – SVN 6000-6063 – X11
A hálózatokat leíró ún. ISO-OSI referenciamodellről az alábbi linkek alatt olvashatunk részleteket. Jól látható az a bizonyos hét réteg, melyen keresztül minden hálózati kapcsolat megvalósul. Az SSH szolgáltatás – ahogy a többi is – az alkalmazási (7-es) réteg része, de minden bitje átmegy a fizikai (1-es) rétegen!
Az nmap segítségével egy szerverről kideríthető, hogy mely portokon vannak szolgáltatások telepítve. Eresszünk rá egy egyszerű scan-t a localhost-ra! 🙂
gvamosi@gergo1:~$ nmap -A -T4 localhost Starting Nmap 7.70 ( https://nmap.org ) at 2019-09-19 10:09 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.00013s latency). Other addresses for localhost (not scanned): ::1 Not shown: 996 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10 (protocol 2.0) | ssh-hostkey: | 2048 5f:9c:30:d8:aa:23:5a:d2:8b:52:ff:22:cf:c0:ae:6d (RSA) | 256 3e:25:ef:3e:78:88:07:47:8d:76:67:ce:91:dc:8d:d4 (ECDSA) |_ 256 d6:8f:00:80:43:8a:c7:05:dc:b4:2b:de:96:c3:12:fb (ED25519) 80/tcp open http Apache httpd 2.4.38 ((Debian)) |_http-server-header: Apache/2.4.38 (Debian) |_http-title: Apache2 Debian Default Page: It works 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 445/tcp open netbios-ssn Samba smbd 4.9.5-Debian (workgroup: WORKGROUP) Service Info: Host: GERGO1; OS: Linux; CPE: cpe:/o:linux:linux_kernel Host script results: |clock-skew: mean: -40m00s, deviation: 1h09m16s, median: 0s |_nbstat: NetBIOS name: GERGO1, NetBIOS user: , NetBIOS MAC: (unknown) | smb-os-discovery: | OS: Windows 6.1 (Samba 4.9.5-Debian) | Computer name: gergo1 | NetBIOS computer name: GERGO1\x00 | Domain name: \x00 | FQDN: gergo1 | System time: 2019-09-19T10:10:03+02:00 | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) | smb2-security-mode: | 2.02: |_ Message signing enabled but not required | smb2-time: | date: 2019-09-19 10:10:03 |_ start_date: N/A Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 12.11 seconds
Látható, hogy a 22-es, 80-as, 139-es és 445-ös portokon találhatóak “nyílt” portok. Ezt tudhatom fejből is, mivel SSH szervert, HTTP szervert, és Windows-os ún. Samba szervert telepítettem, a hálózaton lévő Windows-os gépekkel való adatátvitelhez. 🙂
Végül nézzünk meg egy még egyszerűbb portszkent! (Figyelem: bizonyos szkenek – pl. UDP – root hozzáférést igényelnek.) 🙂
gvamosi@gergo1:~$ nmap localhost Starting Nmap 7.70 ( https://nmap.org ) at 2019-09-19 10:39 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.00013s latency). Other addresses for localhost (not scanned): ::1 Not shown: 996 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 139/tcp open netbios-ssn 445/tcp open microsoft-ds Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
Végül nézzük meg a netstat parancs kimenetelét (miután a net-tools-t felinstalláltuk). A netstat minden hálózati kapcsolatot feltérképez. Jól láthatóak a https kapcsolatok és az ún. ephemeral portok kliens (gergo1) oldalon. Ezek magasabb portszámok – és nálam sok tab van nyitva a Chrome-ban. 🙂
root@gergo1:~# apt-get install net-tools .. root@gergo1:~# logout gvamosi@gergo1:~$ netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 gergo1:44450 13.94.251.244:https ESTABLISHED tcp 0 171 gergo1:44860 109.233.153.16:https FIN_WAIT1 tcp 0 0 gergo1:57636 ws-in-f188.1e100.n:5228 ESTABLISHED tcp 0 1 gergo1:58322 40.68.210.8:https FIN_WAIT1 tcp 0 1 gergo1:50668 wo-in-f188.1e100.n:5228 FIN_WAIT1 tcp 0 0 gergo1:56840 104.16.190.66:https ESTABLISHED tcp 0 1 gergo1:44206 13.94.251.244:https FIN_WAIT1 tcp 0 1 gergo1:52762 13.94.112.175:https FIN_WAIT1 tcp 0 0 gergo1:40996 68.232.34.200:https ESTABLISHED tcp 0 0 gergo1:60478 e1-ha.ycpi.via.ya:https ESTABLISHED tcp 0 0 gergo1:48022 52.114.158.92:https TIME_WAIT tcp 0 1 gergo1:51022 13.107.3.128:https FIN_WAIT1 .. tcp 0 0 gergo1:59514 edge-star-shv-01-:https ESTABLISHED tcp 0 0 gergo1:51986 xx-fbcdn-shv-01-v:https ESTABLISHED tcp6 0 0 192.168.0.109:45541 13.69.158.96:https ESTABLISHED tcp6 0 74 192.168.0.109:41903 13.69.158.96:https FIN_WAIT1 udp 0 0 gergo1:40680 prg02s12-in-f10.1e1:443 ESTABLISHED udp 0 0 gergo1:40731 bud02s28-in-f8.1e10:443 ESTABLISHED udp 0 0 gergo1:41421 bud02s26-in-f14.1e1:443 ESTABLISHED udp 0 0 gergo1:33400 wn-in-f189.1e100.ne:443 ESTABLISHED udp 0 0 gergo1:41687 bud02s27-in-f2.1e10:443 ESTABLISHED udp 0 0 gergo1:33916 bud02s26-in-f14.1e1:443 ESTABLISHED udp 0 0 gergo1:54408 wb-in-f189.1e100.ne:443 ESTABLISHED udp 0 0 gergo1:38164 muc03s07-in-f99.1e1:443 ESTABLISHED udp 0 0 gergo1:47052 muc03s07-in-f110.1e:443 ESTABLISHED udp 0 0 gergo1:52313 ham02s13-in-f14.1e1:443 ESTABLISHED Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ] DGRAM 32111 /var/lib/samba/private/msg.sock/1547 unix 2 [ ] DGRAM 31112 /var/lib/samba/private/msg.sock/1602 unix 3 [ ] DGRAM 11603 /run/systemd/notify unix 19 [ ] DGRAM 11622 /run/systemd/journal/dev-log unix 7 [ ] DGRAM 11635 /run/systemd/journal/socket unix 2 [ ] DGRAM 11664 /run/systemd/journal/syslog unix 2 [ ] DGRAM 23637393 /run/wpa_supplicant/p2p-dev-wlp2s0 ..
Sőt, így a végére még UNIX domain socket-ek is jutnak. 🙂 Ezek file alapú IPC (inter-process communication) socket-ek. 🙂
Fel kellett installálnom a szokásos apt-get install paranccsal a telnet csomagot. Úgy látszik már annyira kiment a divatból ez az ódon parancs, hogy fenn sincs a distribution-ban alapból. 🙂
Régebben két Linux (UNIX) gép között leginkább csak a telnet parancs volt. Ez kódolatlan plain text (sima szöveges) adatátvitel két hálózati szereplő között. Hja, “biztonság”, hol volt akkor még. Védett és zárt egyetemi hálózatokon keresztül két professzor “talkolt” a cső két végén. 🙂
Nézem, hogy van nálam fenn webszerver (apache). Akkor próbáljuk ki a telnet parancsot! Első paramétere a hoszt, második a portszám, ez 0 – 65535-ig (2^16-1) lehet egy egész szám. (Linux-on – ahogy minden más hálózatba kötött gépen – a szolgáltatások portokon csücsülnek.)
gvamosi@gergo1:~$ telnet localhost 80 Trying ::1… Connected to localhost. Escape character is '^]'. GET /info.php
A HTTP protokoll a 80-as porton kommunikál. Ez az egész világon így van alapból. Végső soron a HTTPS 443-as port is ugyanez, csak az még be van “csomagolva” egy secure (biztonságos) layer-be (rétegbe). 🙂 Miután beírtuk a terminálba, hogy GET /info.php, jön a php info oldal a www root-ból (/var/www/html).
gvamosi@gergo1:~$ ls -l /var/www/html total 16 -rw-r--r-- 1 root root 10701 Aug 28 2017 index.html -rw-r--r-- 1 root root 20 Aug 28 2017 info.php
A www root lekérdezése egész egyszerűen a “GET /” kéréssel lehetséges. Az escape karakter a “ctrl+]” billentyű-kombóval érhető el. Kérdem én: magyar billentyűzeten ez hogyan lehetséges? Persze nálam többnyire angol van. Az escape beírása után pl. quit paranccsal juthatunk vissza a command shell-ünkbe. Ennyi az egész! 🙂 Jól látható az egész TCP/IP protokoll csővezeték volta, és a HTTP egyszerűsége. Végsősoron minden protokoll hasonlóképpen működik, többek között az SMTP is hasonlóan vezérelhető plain text parancsokkal.
Hozzászóláshoz be kell jelentkezni!