Titkosítás, DES, AES, Blowfish, MD4, MD5, SHA-2, RSA, DSA, RC4, TKIP, WEP, WPA, WPA2, TLS, SSL, PGP, SSH

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.

https://en.wikipedia.org/wiki/Symmetric-key_algorithm

https://en.m.wikipedia.org/wiki/Blowfish_(cipher)

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.

https://en.wikipedia.org/wiki/Public-key_cryptography

https://en.wikipedia.org/wiki/RSA_(cryptosystem)

https://en.wikipedia.org/wiki/Digital_Signature_Algorithm

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.

https://hu.wikipedia.org/wiki/MD5

https://en.wikipedia.org/wiki/SHA-2

É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. 🙂

https://en.wikipedia.org/wiki/RC4

https://en.wikipedia.org/wiki/Wired_Equivalent_Privacy

https://hu.wikipedia.org/wiki/TKIP

Ma nyilvános kulcsú algoritmusból legalább 2048 bites RSA kulcsokat, szimmetrikusból AES-t, illetve egyirányúból SHA-2-t használunk. 🙂

RSA titkosítást használunk a TLS (Transport Layer Security), SSL (Secure Sockets Layer) és SSH (Secure Shell) protokollokban, illetve PGP (Pretty Good Privacy) folyamán.

https://hu.wikipedia.org/wiki/PGP

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. 🙂

https://www.cloudflare.com/learning/ssl/what-happens-in-a-tls-handshake/

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. 🙂

Reklámok

Portszkennelés (Port Scan) Linux alatt – nmap, hálózati kapcsolatok – netstat

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”).

https://support.holmsecurity.com/hc/en-us/articles/212963869-What-is-the-difference-between-TCP-and-UDP-

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.

http://www.steves-internet-guide.com/tcpip-ports-sockets/

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! 🙂

https://serverfault.com/questions/533611/how-do-high-traffic-sites-service-more-than-65535-tcp-connections

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!

https://hu.wikipedia.org/wiki/OSI-modell

https://www.studytonight.com/computer-networks/complete-osi-model

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. 🙂

Telnet, HTTP 80-as port

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.