Negli ultimi tempi si parla molto di attacchi alla supply chain, ovvero cercare di compromettere l’elemento meno sicuro in una catena di approvvigionamento allo scopo di attaccare obiettivi più sicuri.
Un possibile vettore di attacco potrebbe essere rappresentato da semplice typosquatting in cui l’attaccante sfrutta il fatto che le persone spesso premono i tasti sbagliati durante la digitazione sulla tastiera. Questo potrebbe essere fatto sia sul dominio host in cui l’attaccante registra un errore di battitura comune di github.com, ma ancora più semplice sarebbe semplicemente registrare un nuovo utente su GitHub, o qualsiasi altro host di pacchetti con errori di battitura.
Con questo obiettivo lo sviluppatore di questa soluzione ha creato uno strumento che può aiutare a identificare potenziali pacchetti di typosquat.
Pkgtwist è uno strumento per trovare potenziali errori di battitura di pacchetti e moduli Go ospitati su GitHub e GitLab.
Come funziona
Quando pkgtwist riceve uno o più percorsi di importazione del pacchetto Go, ad esempio github.com/stretchr/testify
, genererà potenziali errori di battitura, o permutazioni, del proprietario del pacchetto utilizzando varie strategie per verificare se sulla piattaforma esistono potenziali variazioni di typosquatting del proprietario. Se trova un potenziale typosquat, procede a verificare se il proprietario del typosquat ha un repository con lo stesso nome del pacchetto originale.
Permutazioni di typosquat
Queste sono le strategie di permutazione typosquat che pkgtwist utilizza attualmente:
- Omissione: rimozione di un singolo carattere (manca la pressione di un tasto,
stretchr
=>strechr
) - Ripetizione: ripetizione di caratteri (premendo due volte un tasto,
stretchr
=>stretchhr
) - Bitsquatting : possibili errori di bit-flip (
stretchr
=>strftchr
) - Trasposizione: scambio di caratteri adiacenti (premendo i tasti nell’ordine sbagliato,
stretchr
=>strethcr
)
Se pkgtwist viene fornito github.com/stretchr/testify
come input, verificherà l’esistenza delle seguenti variazioni di typosquat stretchr
su GitHub:
tretchr
sretchr
stetchr
strtchr
strechr
strethr
stretcr
stretch
sstretchr
sttretchr
strretchr
streetchr
strettchr
stretcchr
stretchhr
stretchrr
rtretchr
qtretchr
ptretchr
wtretchr
vtretchr
utretchr
ttretchr
suretchr
svretchr
swretchr
spretchr
sqretchr
srretchr
ssretchr
stsetchr
stpetchr
stqetchr
stvetchr
stwetchr
sttetchr
stuetchr
strdtchr
strgtchr
strftchr
stratchr
strctchr
strbtchr
streuchr
strevchr
strewchr
strepchr
streqchr
strerchr
streschr
stretbhr
stretahr
stretghr
stretfhr
stretehr
stretdhr
stretcir
stretcjr
stretckr
stretclr
stretcmr
stretcnr
stretcor
stretchs
stretchp
stretchq
stretchv
stretchw
stretcht
stretchu
tsretchr
srtetchr
stertchr
strtechr
strecthr
strethcr
stretcrh
Installazione di pkgtwist
Esegui go get gitlab.com/michenriksen/pkgtwist/cmd/pkgtwist
( go install ...
se usi Go 1.16) in un terminale.
Utilizzando pkgtwist
Pkgtwist deve essere in grado di eseguire query sia sull’API github.com che su gitlab.com per verificare la presenza di progetti e repository di typosquat. Pertanto, sarà necessario disporre di un utente su entrambe le piattaforme e generare token di accesso personali:
- Come generare token di accesso personale su GitHub
- Come generare token di accesso personale su GitLab
Questi token di accesso personali devono essere registrati come variabili di ambiente per la shell:
export PKGTWIST_GITHUB_ACCESS_TOKEN=<GITHUB_ACCESS_TOKEN>
export PKGTWIST_GITLAB_ACCESS_TOKEN=<GITLAB_ACCESS_TOKEN>
In alternativa, dai questi token come opzioni della riga di comando a pkgtwist, ma ciò non è consigliato poiché i token verranno salvati nella cronologia dei comandi.
Ora invia semplicemente un elenco di percorsi di importazione del pacchetto go a pkgtwist e inizierà a verificare le variazioni di typosquat:
$ cat packages.txt | pkgtwist
Vedere pkgtwist -h
per ulteriori opzioni della riga di comando.