Le API (Application Programming Interface) sono fondamentali nel contesto dell'innovazione tecnologica e della connettività tra sistemi. L'utilizzo delle API facilita le attività in quanto i dati vengono validati e raccolti per noi e poi ci vengono veicolati mediante uno stream dati di tipo JSON, splendidamente formattate. Tuttavia, hanno i loro lati negativi, ad esempio:
I dati DNS sono sempre stati un tesoro per chi si occupa di OSINT e in questa parte tratteremo alcune delle diverse tecniche che è possibile utilizzare per automatizzare l'estrazione di dati utili dai record DNS, a partire dai trasferimenti di zona!
I trasferimenti di zone DNS sono un meccanismo di replica dei database DNS tra un insieme di server DNS. In realtà, non hanno altro uso operativo che questo e quindi dovrebbero essere consentiti solo tra server DNS che si fidano esplicitamente l'uno dell'altro (ad esempio, server DNS che fanno parte della stessa organizzazione). A volte, però, i server DNS sono configurati per rispondere alle richieste di trasferimento di zona (tipi di query DNS AXFR) per chiunque ne faccia richiesta. Questa è generalmente considerata una cattiva pratica di sicurezza perché consente a chiunque di scaricare istantaneamente le zone DNS per ottenere informazioni su tutti gli host e i sottodomini di un'organizzazione.
Quindi, avete capito bene, mediante questa tecnica è possibile sapere quali hostname sono configurati su un determinato DNS. Ed essendo spesso degli hostname parlanti, è possibile determinarne l'uso.
È il 2024 e molti pensano che i trasferimenti di zone siano una reliquia degli anni '90, ma vi dico di no! Il fattore umano la fa sempre da padrone! Infatti esistono numerosi domini ancora mal configurati e che possono ancora essere interrogati.
Se siete interessati ad approfondire l'argomento, online troverete molti tool che effettuano interrogazioni sui server DNS. Qui lascio il link as uno di questi tool scritto in Golang per eseguire query massive di tipo AXFR su domini.
$ echo "unifi.it" | ./hakaxfr
ns2.unifi.it
ns3.unifi.it
router1.unifi.it
router2.unifi.it
routottico1.unifi.it
routottico2.unifi.it
routotticoing.unifi.it
presenze.unifi.it
presenze-test.unifi.it
presenzeweb.unifi.it
saphirbionano3.unifi.it
saphirbionano4.unifi.it
[...]
Se state investigando su un dominio per il quale non è stato possibile usare la tecnica del "Trasferimento di zona", un altro metodo per scoprire i sottodomini di un'organizzazione è il brute-forcing. La premessa di base è che si sceglie un dominio principale, ad esempio example.com. Poi si dispone di un ampio elenco di parole e si tiene traccia di quelle che si risolvono. Ad esempio:
Esistono molti strumenti che sfruttano questa tecnica, ma una buona opzione gratuita è subbrute, che utilizza i resolver aperti come proxy per aggirare la limitazione della velocità del DNS e garantire anche una certa riservatezza.
L'altro pezzo del puzzle è avere una buona lista di parole. Una scelta eccellente è il file best-dns-wordlist.txt dalla pagina wordlist di Assetnote. Se state cercando qualcosa di più piccolo, provate dal repository "SecLists" di Daniel Miessler.
$ ./subbrute.py -s names_small.txt google.com --type TXT
google.com
www.google.com
_spf.google.com
_tcp.google.com
_netblocks.google.com
_netblocks2.google.com
_netblocks3.google.com
_tls.google.com
_domainkey.google.com
_caldav._tcp.google.com
_ldap._tcp.google.com
blog.google.com
www.blogger.com
[...]
I record DNS tipo TXT sono semplicemente un tipo di risorsa DNS utilizzata per memorizzare testo arbitrario. Nel corso degli anni sono stati introdotti diversi casi d'uso per i record TXT, tra cui SPF (Sender Policy Framework), DKIM, DMARC e la verifica della proprietà del dominio. Come la maggior parte degli altri record DNS, chiunque può consultare i record TXT. Ad esempio, questi sono i record TXT associati a facebook.com.
;; ANSWER SECTION:
facebook.com. 3600 IN TXT "zoom-domain-verification=4b2ef4e1-6dee-4483-9869-9bef353fd147"
facebook.com. 3600 IN TXT "google-site-verification=sK6uY9x7eaMoEMfn3OILqwTFYgaNp4llmguKI-C3_iA"
facebook.com. 3600 IN TXT "google-site-verification=A2WZWCNQHrGV_TWwKh6KHY90tY0SHZo_RnyMJoDaG0s"
facebook.com. 3600 IN TXT "v=spf1 redirect=_spf.facebook.com"
facebook.com. 3600 IN TXT "google-site-verification=wdH5DTJTc9AYNwVunSVFeK0hYDGUIEOGb-RReU6pJlY
Cosa leggiamo qui. In particolare, oltre alle informazioni riguardanti il record SPF, utilizzato per specificare quali server sono autorizzati a inviare email per conto di un determinato dominio, vediamo anche che vi sono delle "chiavi" (o stringhe) di verifica per diversi servizi, come Google e Zoom. Quindi sappiamo che in casa Facebook, usano servizi Zoom ;-)
Queste informazioni possono essere raccolte utilizzando il comando dig o un qualsiasi tool che consenta di effettuare query su server DNS, in questo caso il comando completo è:
$ dig TXT facebook.com
I record TXT possono essere scaricati in massa usando uno strumento come zdns. Il comando sarebbe simile a questo:
$ echo "facebook.com" | zdns TXT --threads 20 | jq .
L'output predefinito è una struttura dati di tipo JSON, che può essere abbellito o modificato con uno strumento come jq, come nella schermata seguente
{
"data": {
"additionals": [
{
"flags": "",
"type": "EDNS0",
"udpsize": 1232,
"version": 0
}
],
"answers": [
{
"answer": "google-site-verification=wdH5DTJTc9AYNwVunSVFeK0hYDGUIEOGb-RReU6pJlY",
"class": "IN",
"name": "facebook.com",
"ttl": 3600,
"type": "TXT"
},
{
"answer": "google-site-verification=sK6uY9x7eaMoEMfn3OILqwTFYgaNp4llmguKI-C3_iA",
"class": "IN",
"name": "facebook.com",
"ttl": 3600,
"type": "TXT"
},
{
"answer": "zoom-domain-verification=4b2ef4e1-6dee-4483-9869-9bef353fd147",
"class": "IN",
"name": "facebook.com",
"ttl": 3600,
"type": "TXT"
},
{
"answer": "google-site-verification=A2WZWCNQHrGV_TWwKh6KHY90tY0SHZo_RnyMJoDaG0s",
"class": "IN",
"name": "facebook.com",
"ttl": 3600,
"type": "TXT"
},
{
"answer": "v=spf1 redirect=_spf.facebook.com",
"class": "IN",
"name": "facebook.com",
"ttl": 3600,
"type": "TXT"
}
],
"protocol": "udp",
"resolver": "127.0.0.1:53"
},
"name": "facebook.com",
"status": "NOERROR",
"timestamp": "2024-09-12T11:59:37+02:00"
}
Una delle tecniche di ricognizione più importanti è la scansione delle porte. Lo scanner di porte più noto è Nmap, anche perché viene mantenuto attivamente dal settembre 1997. Nmap ("Network Mapper") è un'utility gratuita e open source per l'analisi delle reti e verifiche di sicurezza. In sostanza, esistono 65535 porte TCP e altrettante porte UDP. Uno scanner di porte si collega a una selezione di queste porte (o potenzialmente a tutte) per determinare quali sono aperte. Ogni volta che si scopre una porta aperta, si può dedurre che un servizio di qualche tipo è in esecuzione su quella porta.
Per capire quale sia questo servizio, dobbiamo utilizzare una tecnica chiamata banner grabbing. Il banner grabbing consiste nell'analizzare le risposte delle connessioni per determinare quale servizio è in esecuzione, cioè ci si connette, si cattura il banner e lo si analizza.
È possibile catturare questi banner manualmente utilizzando uno strumento come netcat. Nell'esempio seguente ci colleghiamo al server SMTP di Gmail utilizzando netcat. Il server risponde con una risposta 220, che indica che il servizio SMTP è pronto a ricevere connessioni.
$ nc smtp.gmail.com 587
220 smtp.gmail.com ESMTP 5b1f17b1804b1-42cdf526f81sm18157895e9.17 - gsmtp
Nmap mantiene un elenco di banner mappati ai nomi dei servizi, molto utile per automatizzare il processo di determinazione dei servizi in esecuzione su più host.
Di seguito mostro l'output di una scansione Nmap sulla porta 587 di smtp.gmail.com con il rilevamento del servizio abilitato.
$ Nmap -Pn -p 587 -sV smtp.gmail.com
Starting Nmap 7.95 ( https://Nmap.org ) at 2024-09-12 14:30 CEST
Nmap scan report for smtp.gmail.com (142.250.110.109)
Host is up (0.081s latency).
Other addresses for smtp.gmail.com (not scanned): 2a00:1450:400c:c04::6c
rDNS record for 142.250.110.109: wf-in-f109.1e100.net
PORT STATE SERVICE VERSION
587/tcp open smtp Google gsmtp
Service Info: Host: smtp.gmail.com
Service detection performed. Please report any incorrect results at https://Nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 0.61 seconds
Come si può vedere, Nmap determina correttamente che il servizio in esecuzione su quella porta è Google gsmtp.
Di seguito vengono meglio dettagliate le opzioni passate a Nmap:
Per automatizzare questo compito su più host, si può passare a Nmap un elenco di nomi di host e/o indirizzi IP in un file utilizzando l'opzione -iL, come in questo esempio:
$ nmap -A -p587 -iL domains.txt
Quando si esegue un'analisi OSINT su un sito Web, è pertinente sapere quali endpoint e risorse sono presenti o utilizzati da quell'applicazione. Un metodo abbastanza efficiente per determinare questo aspetto dal punto di vista della "black box" è lo spidering.
Lo spidering consiste fondamentalmente nell'automatizzare il processo di andare sul sito web e fare clic su ogni link ed eseguire ogni funzione all'interno del sito per mappare le funzionalità. Su questo repository di GitHub potrete trovare hakrawler, un tool che permette di ottenere questo risultato, anche se non gestisce molto bene le SPA (Single Page Application). Un'altra opzione eccellente è la funzione di spider inclusa in Burp Suite.
Ecco hakrawler in azione:
$ echo "https://www.google.com" | ./hakrawler
https://mail.google.com/mail/&ogbl
https://www.google.com/imghp?hl=it&ogbl
https://www.google.it/intl/it/about/products
https://accounts.google.com/ServiceLogin?hl=it&passive=true&continue=https://www.google.com/&ec=GAZAmgQ
https://support.google.com/websearch/answer/106230?hl=it
https://about.google/?utm_source=google-IT&utm_medium=referral&utm_campaign=hp-footer&fg=1
https://www.google.com/intl/it_it/ads/?subid=ww-ww-et-g-awa-a-g_hpafoot1_1!o2&utm_source=google.com&utm_medium=referral&utm_campaign=google_hpafooter&fg=1
https://www.google.com/services/?subid=ww-ww-et-g-awa-a-g_hpbfoot1_1!o2&utm_source=google.com&utm_medium=referral&utm_campaign=google_hpbfooter&fg=1
https://google.com/search/howsearchworks/?fg=1
[...]
Lo Spidering può anche essere un meccanismo utile per determinare le diverse tecnologie che potrebbero essere in uso; ad esempio, la seguente schermata mostra che WordPress è utilizzato sul potale https://dbdmg.polito.it (DataBase and Data Mining Group - Politecnico di Torino), oltre a scoprire una serie di dipendenze JavaScript lato client.
$ echo "https://dbdmg.polito.it" | ./hakrawler | grep wp-content | sort -u
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/burst-statistics/assets/js/build/burst.min.js?ver=1.7.1
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/burst-statistics/helpers/timeme/timeme.min.js?ver=1.7.1
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/cookie-law-info/legacy/public/js/cookie-law-info-public.js?ver=3.2.6
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/cryout-serious-slider/resources/jquery.mobile.custom.min.js?ver=1.2.5
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/cryout-serious-slider/resources/slider.js?ver=1.2.5
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/editorplus/assets/scripts/countdown.js?ver=new
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/editorplus/assets/scripts/counter.js?ver=initail
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/editorplus/assets/scripts/frontend.js?ver=66e312f25d95d
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/editorplus/assets/scripts/lottie-player.js?ver=latest
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/editorplus/assets/scripts/progressbar.js?ver=new
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/editorplus/assets/scripts/tabs.js?ver=new
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/editorplus/assets/scripts/toggles.js?ver=new
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/pdf-embedder/assets/js/pdfemb.min.js?ver=4.8.2
https://dbdmg.polito.it/dbdmg_web/wp-content/plugins/pdf-embedder/assets/js/pdfjs/pdf.min.js?ver=2.2.228
https://dbdmg.polito.it/dbdmg_web/wp-content/themes/fluida/resources/js/ajax.js?ver=1.8.8
https://dbdmg.polito.it/dbdmg_web/wp-content/themes/fluida/resources/js/frontend.js?ver=1.8.8
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/0-IntroductionCourse.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/01-NoSQL-intro-and-document-DB.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/01_Intro_BigData_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/01_MapReduce_Exercises_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/02-MongoDB-intro-GUI.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/02_Architectures_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/03-MongoDB-operations-find.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/03_Intro_HadoopAndMapReduce_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/03b_HDFS_Hadoop_CommandLine_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/04-MongoDB-aggregation-indexes.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/04_HadoopImplementationOfMapReduce_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/04b_ClusterJupyter_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/05-Distributed-Data-Management-Replication-CAP-Conflicts.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/05_MapReduce_Patterns_Part1_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/06-MongoDB-replication.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/06_AdvancedTopicsMapReduce_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/07-MongoDB-query-exercises.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/07_MapReduce_Patterns_Part2_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/08_SQLOperators_BigData_NewStyle.pdf
https://dbdmg.polito.it/dbdmg_web/wp-content/uploads/2021/09/08a-Distributed-Transactions-2PC.pdf
[...]
Il web scraping è il processo di scaricamento ed elaborazione delle risposte HTTP per estrarre informazioni utili in modo automatico. Ad esempio, se si volesse ottenere un elenco di persone che lavorano in un'azienda da LinkedIn, si potrebbe utilizzare uno strumento di web scraping automatizzato per raccogliere un elenco di tali profili e poi estrarre informazioni da ciascuno di essi, anche se non si dovrebbe fare questo perché è contrario ai termini di servizio di LinkedIn.
Un esempio semplificato di web scraping è l'estrazione di e-mail dalle risposte HTTP utilizzando grep. Ad esempio, prendete questo comando:
$ curl -s https://www.unipa.it | grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b"
urp@unipa.it
urp@unipa.it
pec@cert.unipa.it
pec@cert.unipa.it
webmaster@unipa.it
webmaster@unipa.it
Il comando curl stampa semplicemente la risposta HTTP a https://www.unipa.it e il comando grep contiene un'espressione regolare che trova e stampa tutte le e-mail all'interno del codice html. Si può vedere che in questo caso ha trovato alcune mailbox. Un processo simile potrebbe essere seguito per estrarre altre informazioni come numeri di telefono, nomi, hostname, etc.
Se vi sentite a vostro agio nello scrivere un po' di codice, ci sono alcuni ottimi framework Python per creare il vostro web scraper personalizzato. Vi consiglio di dare un'occhiata a Beautiful Soup.
Oppure, immaginate di concatenare l'output di un tool come "hakrawler" (che abbiamo visto sopra con la tecnica Web Spidering), con quanto appena visto con l'uso della tecnica di Web Scraping, cosa potremmo ottenere!
Essenzialmente, il WHOIS è un protocollo utilizzato per interrogare i database che memorizzano gli utenti registrati o gli assegnatari di risorse Internet come i nomi di dominio e gli intervalli di indirizzi IP. I record WHOIS sono un tesoro assoluto di informazioni per la ricerca di domini, indirizzi IP e ASN, anche se con il passare del tempo stanno diventando meno utili a causa delle normative GDPR e del fatto che le persone utilizzano i servizi di privacy WHOIS per mascherare la loro vera identità.
Un ottimo esempio di record WHOIS con tutti i dettagli può essere visto qui sotto per unipa.it:
$ whois unipa.it
*********************************************************************
* Please note that the following result could be a subgroup of *
* the data contained in the database. *
* *
* Additional information can be visualized at: *
* http://web-whois.nic.it *
*********************************************************************
Domain: unipa.it
Status: ok
Signed: no
Created: 1996-01-29 00:00:00
Last Update: 2024-02-14 00:57:55
Expire Date: 2025-01-29
Registrant
Organization: Universita' di Palermo
Address: viale delle Scienze
Palermo
90128
PA
IT
Created: 2007-03-01 10:37:13
Last Update: 2011-03-24 11:01:07
Admin Contact
Name: Filippo Sorbello
Address: CUC
viale delle Scienze
Palermo
90128
PA
IT
Created: 1998-11-04 00:00:00
Last Update: 2011-03-24 11:01:08
Technical Contacts
Name: Massimo Tartamella
Address: via Piersanti Mattarella, 110
Trapani
91100
TP
IT
Created: 2000-10-03 00:00:00
Last Update: 2011-03-24 11:01:09
Registrar
Organization: Consortium GARR
Name: GARR-REG
Web: http://www.garr.it
DNSSEC: no
Nameservers
sunipa.cuc.unipa.it
cucaix.cuc.unipa.it
Eseguendo lo stesso comando per un indirizzo IP di assegnato all'Università di Palermo o per l'ASN della stessa infrastruttura si ottengono risultati simili.
$ whois 147.163.158.6
#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/resources/registry/whois/tou/
#
# If you see inaccuracies in the results, please report at
# https://www.arin.net/resources/registry/whois/inaccuracy_reporting/
#
# Copyright 1997-2024, American Registry for Internet Numbers, Ltd.
#
NetRange: 147.161.8.0 - 147.163.255.255
CIDR: 147.161.64.0/18, 147.161.32.0/19, 147.161.8.0/21, 147.162.0.0/15, 147.161.128.0/17, 147.161.16.0/20
NetName: RIPE-ERX-147-161-0-0
NetHandle: NET-147-161-8-0-1
Parent: NET147 (NET-147-0-0-0-0)
NetType: Early Registrations, Transferred to RIPE NCC
OriginAS:
Organization: RIPE Network Coordination Centre (RIPE)
RegDate: 2003-10-08
Updated: 2019-08-21
Comment: These addresses have been further assigned to users in
Comment: the RIPE NCC region. Contact information can be found in
Comment: the RIPE database at http://www.ripe.net/whois
Ref: https://rdap.arin.net/registry/ip/147.161.8.0
ResourceLink: https://apps.db.ripe.net/search/query.html
ResourceLink: whois.ripe.net
OrgName: RIPE Network Coordination Centre
OrgId: RIPE
Address: P.O. Box 10096
City: Amsterdam
StateProv:
PostalCode: 1001EB
Country: NL
RegDate:
Updated: 2013-07-29
Ref: https://rdap.arin.net/registry/entity/RIPE
ReferralServer: whois://whois.ripe.net
ResourceLink: https://apps.db.ripe.net/search/query.html
OrgTechHandle: RNO29-ARIN
OrgTechName: RIPE NCC Operations
OrgTechPhone: +31 20 535 4444
OrgTechEmail: hostmaster@ripe.net
OrgTechRef: https://rdap.arin.net/registry/entity/RNO29-ARIN
OrgAbuseHandle: ABUSE3850-ARIN
OrgAbuseName: Abuse Contact
OrgAbusePhone: +31205354444
OrgAbuseEmail: abuse@ripe.net
OrgAbuseRef: https://rdap.arin.net/registry/entity/ABUSE3850-ARIN
#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/resources/registry/whois/tou/
#
# If you see inaccuracies in the results, please report at
# https://www.arin.net/resources/registry/whois/inaccuracy_reporting/
#
# Copyright 1997-2024, American Registry for Internet Numbers, Ltd.
#
Found a referral to whois.ripe.net.
% This is the RIPE Database query service.
% The objects are in RPSL format.
%
% The RIPE Database is subject to Terms and Conditions.
% See https://apps.db.ripe.net/docs/HTML-Terms-And-Conditions
% Note: this output has been filtered.
% To receive output for a database update, use the "-B" flag.
% Information related to '147.163.0.0 - 147.163.255.255'
% Abuse contact for '147.163.0.0 - 147.163.255.255' is 'cert@garr.it'
inetnum: 147.163.0.0 - 147.163.255.255
netname: PALERMO-NET
descr: UNI-Palermo
country: IT
org: ORG-UDSD39-RIPE
admin-c: RU1067-RIPE
tech-c: GP6058-RIPE
tech-c: NT2946-RIPE
tech-c: OF1421-RIPE
tech-c: CB18715-RIPE
status: LEGACY
remarks: This prefix is statically assigned
remarks: To notify abuse mailto: cert@garr.it
remarks: GARR - Italian academic and research network
mnt-by: RIPE-NCC-LEGACY-MNT
mnt-by: GARR-LIR
mnt-irt: IRT-GARR-CERT
created: 1970-01-01T00:00:00Z
last-modified: 2020-11-16T17:43:00Z
source: RIPE
sponsoring-org: ORG-GIRa1-RIPE
organisation: ORG-UDSD39-RIPE
org-name: Universita' degli Studi di Palermo
country: IT
org-type: OTHER
address: Palazzo Steri, P.zza Marina 61
address: 90134
address: Palermo
address: I
abuse-c: AG16225-RIPE
mnt-ref: GARR-LIR
mnt-by: GARR-LIR
created: 2014-05-27T08:01:50Z
last-modified: 2022-12-01T17:31:48Z
source: RIPE # Filtered
person: Carmelo Belfiore
address: UNI-Palermo
address: Viale delle Scienze
address: I-90128-Palermo
address: Italy
phone: +39 091 23863756
fax-no: +39 091 23860873
nic-hdl: CB18715-RIPE
mnt-by: GARR-LIR
created: 2020-03-09T11:28:33Z
last-modified: 2020-03-09T11:28:33Z
source: RIPE # Filtered
person: Gaetano Pisano
address: Universita' degli Studi di Palermo
address: Viale delle Scienze, Ed. 11
address: I-90128-Palermo
address: Italy
phone: +39 091 23860072
fax-no: +39 091 23860704
nic-hdl: GP6058-RIPE
mnt-by: GARR-LIR
created: 2006-06-30T08:23:02Z
last-modified: 2023-09-14T06:38:51Z
source: RIPE # Filtered
person: Nicola Trapani
address: Universita' degli Studi di Palermo
address: Viale delle Scienze, Ed. 11
address: I-90128-Palermo
address: Italy
phone: +39 091 23860084
fax-no: +39 091 23860704
nic-hdl: NT2946-RIPE
mnt-by: GARR-LIR
created: 2016-05-19T15:08:33Z
last-modified: 2023-09-14T06:39:21Z
source: RIPE # Filtered
person: Orazio Farruggia
address: Universita' degli Studi di Palermo
address: Viale delle Scienze, Ed. 11
address: I-90128-Palermo
address: Italy
phone: +39 091 23860061
fax-no: +39 091 23860704
nic-hdl: OF1421-RIPE
mnt-by: GARR-LIR
created: 2016-05-19T15:08:33Z
last-modified: 2023-09-14T06:39:44Z
source: RIPE # Filtered
person: Riccardo Uccello
address: UNI-Palermo
address: Viale delle Scienze
address: I-90128-Palermo
address: Italy
phone: +39 091 23860060
nic-hdl: RU1067-RIPE
mnt-by: GARR-LIR
created: 2020-03-12T09:49:06Z
last-modified: 2020-03-12T09:49:06Z
source: RIPE # Filtered
% Information related to '147.162.0.0/15AS137'
route: 147.162.0.0/15
descr: Aggregated GARR routes
origin: AS137
remarks: Universita' di Padova
remarks: Universita' di Palermo
remarks: To notify abuse mailto: cert@garr.it
mnt-by: GARR-LIR
created: 2002-04-24T11:36:36Z
last-modified: 2024-02-23T15:44:41Z
source: RIPE
% This query was served by the RIPE Database Query Service version 1.113.2 (ABERDEEN)
Quando si indaga su un nome utente, una tecnica che può dare ottimi risultati è quella di verificare l'esistenza di quel nome utente (e delle sue varianti) su più reti di social media. Ad esempio, se stiamo indagando sul nome utente come "CyberChef", possiamo verificare la prevalenza di questo nome utente su più piattaforme sociali accedendo alla posizione in cui questo nome utente potrebbe essere presente, come ad esempio:
Esistono alcuni servizi che svolgono questa funzione, come NameChk, ma questo post è dedicato all'OSINT senza API, quindi cerchiamo di costruire la nostra soluzione automatizzata. In sostanza, dobbiamo scrivere uno script che esegua un controllo di base a delle firme. Per un semplice esempio di come ciò possa essere realizzato, si veda il seguente script bash che controlla un elenco di nomi utente per vedere se esistono su GitHub.
Per prima cosa ho creato un file con un elenco di utenti, chiamato usernames.txt.
Poi ho creato uno script bash che accede a <a href="https://github.com/" class="redactor-autoparser-object">https://github.com/<usernam...
e controlla se il codice di risposta è 200. Se il codice di risposta è 200 sappiamo che esiste, altrimenti sappiamo che non esiste.
Il codice si presenta come segue:
for username in $(cat usernames.txt); do
if curl -s -o /dev/null -w "%{http_code}" https://github.com/$username | grep -q 200; then
echo "User $username exists at: https://github.com/$username"
else
echo "User $username does not exist on GitHub"
fi;
done
L'esecuzione del codice restituisce il seguente output:
User CyberChef exists at: https://github.com/CyberChef
User nullsoft exists at: https://github.com/nullsoft
User oracl3 exists at: https://github.com/oracl3
User FullJoe does not exist on GitHub
La stessa tecnica può essere utilizzata anche per enumerare l'uso di servizi di terze parti. Ad esempio, si può verificare l'esistenza di bucket AWS S3 analizzando la risposta di http://s3.amazonaws.com/<bu...
, oppure si può verificare se un'organizzazione utilizza Okta per SSO navigando su https://<orgname>.okta.c....
Con un po' di immaginazione, si potrebbe utilizzare questa tecnica per verificare la presenza di diversi servizi di terze parti utilizzati da una specifica organizzazione.
È inoltre possibile utilizzare i risultati dello Spidering sul Web per scoprire servizi di terze parti. Ad esempio, se si trovano riferimenti a un bucket S3 nel codice html dei loro siti web, è molto probabile che il bucket S3 sia di proprietà della stessa organizzazione.
Una delle tecniche preferite per attaccare le grandi organizzazioni è la ricerca di quelli che chiamo "indicatori di manutenzione" nelle risposte. Questo aiuta a dare priorità agli obiettivi che verrebberò attaccati per primi, trovando gli host che molto probabilmente non vengono sottoposti a manutenzione. Alcuni esempi sono riportati di seguito:
Lo scopo di questo post è dimostrare che è possibile raccogliere manualmente molte informazioni utili da varie fonti di dati, senza utilizzare API o spendere soldi per fonti di dati costose. Tutte le fonti di dati citate sono completamente gratuite e tutte le tecniche discusse possono essere automatizzate con un po' di lavoro di dita ("a manina").
Buon OSINT!