Le composant Juniper Network Connect est fréquemment utilisé pour se connecter, via VPN, au système d’information de son organisation.
Ce dernier offre une multitude de fonctionnalités, dont une très pratique : la redirection du réseau du poste vers le SI.
La redirection peut se faire en plusieurs points, mais le principal reste la table de routage modifiée à la connexion :
Ce que Juniper peut nous imposer suite à une connexion
===========================================================================
Liste d'Interfaces
0x1 ........................... MS TCP Loopback interface
0x2 ...00 03 ff 91 17 83 ...... Carte Fast Ethernet PCI à base de Intel 21140 (Générique) - Miniport d'ordonnancement de paquets
0x3 ...00 ff 98 8c 03 82 ...... Juniper Network Connect Virtual Adapter - Miniport d'ordonnancement de paquets
===========================================================================
===========================================================================
Itinéraires actifs :
Destination réseau Masque réseau Adr. passerelle Adr. interface Métrique
0.0.0.0 0.0.0.0 [ip attribuée] [ip attribuée] 1
0.0.0.0 0.0.0.0 192.168.0.254 192.168.0.246 20
[ip attribuée] 255.255.255.255 127.0.0.1 127.0.0.1 10
10.255.255.255 255.255.255.255 [ip attribuée] [ip attribuée] 10
[ip organisme] 255.255.255.255 192.168.0.254 192.168.0.246 1
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.0.0 255.255.255.0 192.168.0.246 192.168.0.246 20
192.168.0.0 255.255.255.0 [ip attribuée] [ip attribuée] 1
192.168.0.246 255.255.255.255 127.0.0.1 127.0.0.1 20
192.168.0.255 255.255.255.255 192.168.0.246 192.168.0.246 20
224.0.0.0 240.0.0.0 192.168.0.246 192.168.0.246 20
224.0.0.0 240.0.0.0 [ip attribuée] [ip attribuée] 1
255.255.255.255 255.255.255.255 [ip attribuée] [ip attribuée] 1
255.255.255.255 255.255.255.255 192.168.0.246 192.168.0.246 1
Passerelle par défaut : [ip attribuée]
===========================================================================
Itinéraires persistants :
Aucun
Il est important de visualiser :
- les rajouts de routes vers la passerelle Juniper (via l’ip attribuée) avec une métrique plus faible que la route originale
- la conservation de la connexion avec la passerelle de l’organisme (notre entreprise) via une route unique et explicite vers l’ip de l’organisme (c’est la seule connexion passant encore en dehors du VPN)
- l’impossibilité de se connecter à son réseau interne ou à internet
La solution trop évidente…
route add 10.0.0.0 mask 255.0.0.0 [ip attribuée]
route delete 0.0.0.0 mask 0.0.0.0 [ip attribuée]
route delete 192.168.0.0 mask 255.0.0.0 [ip attribuée]
- rajout d’une route vers le réseau de notre organisme via le VPN.
- suppression de la passerelle par défaut passant par le VPN, l’on récupère celle d’origine.
- suppression de la route vers le réseau interne qui voulait passer par le VPN, l’on récupère celle d’origine.
Surveillé…
Le service Juniper surveille (par boucle d’environ 5s) la table de routage courante et peut couper la connexion dès détection d’une modification :

loin d’être un bogue, c’est une mesure de sécurité décrite par Juniper : http://kb.juniper.net/InfoCenter/KB15829
Le code
Grâce à un import bien particulier du service :
00475110 GetIpForwardTable IPHLPAPI
… et aux belles traces pouvant être remontées :
.rdata:0047AAA8 00000075 C Route to destination %u.%u.%u.%u is missing mask %u.%u.%u.%u with gw %u.%u.%u.%u, metric %d, if_id %d, disconnecting
.rdata:0047AB20 0000007A C Unauthorized new route to %u.%u.%u.%u/%u.%u.%u.%u has been added (conflicts with our route to %u.%u.%u.%u), disconnecting
…l’on retrouve facilement la routine de vérification appelée périodiquement :
0415D30 sub_415D30 proc near ; DATA XREF: .rdata:0047A838o
.text:00415D30
.text:00415D30 var_1C = dword ptr -1Ch
.text:00415D30 var_18 = dword ptr -18h
.text:00415D30 var_14 = dword ptr -14h
.text:00415D30 var_10 = dword ptr -10h
.text:00415D30 var_C = dword ptr -0Ch
.text:00415D30 var_8 = dword ptr -8
.text:00415D30 var_4 = dword ptr -4
.text:00415D30
.text:00415D30 sub esp, 1Ch
.text:00415D33 push ebp
.text:00415D34 mov ebp, ecx
.text:00415D36 cmp dword ptr [ebp+40h], 0
.text:00415D3A mov [esp+20h+var_14], ebp
.text:00415D3E mov byte ptr [esp+20h+var_1C+3], 0
.text:00415D43 jnz short loc_415D7F
.text:00415D45 push offset aNoRoutesToMoni ; "no routes to monitor"
.text:00415D4A push offset aRmon ; "rmon"
.text:00415D4F push 199h
.text:00415D54 push offset a_Routemon_cpp ; ".\\routemon.cpp"
...
Évitons cette routine après tout ?

Cette fois-ci, après modifications de la table de routage sans déconnexions, les communications fonctionnent vers tous les réseaux :)
…une fois de plus, ça sera dans mimikatz 1.0
.