kippo: Honeypot SSH

Malekal_morte
Messages : 116046
Inscription : 10 sept. 2005 13:57

kippo: Honeypot SSH

par Malekal_morte »

Kippo est un honeypot ( pot de miel ) SSH à forte interaction.

Kippo simule un serveur SSH (SSHd) pour piéger les attaquants. Les traces laissées par les intrus peuvent être consultées en temps réel et permettent de surveiller leurs activités, d'observer leurs méthodes, leurs outils,... et de déduire la nature et parfois les objectifs de l'attaque.

Kippo simule un SSHd avec :
  • Un faux système de fichiers avec possibilité de créer/supprimer
  • Un faux environnement avec de fausses informations /etc/passwd
  • De fausses commandes primaires (ls, cd, cd)
  • Les téléchargements de fichiers (wget)
Le risque d'un piratage réel du serveur n'étant pas écarté, il est conseillé de ne pas installer Kippo sur un serveur de production et de prendre toutes les mesures necessaires (règles de cloisonnements) pour prévenir et signaler toutes tentatives de mouvements latéraux.


Installer Kippo

Installer les divers paquets Python

Code : Tout sélectionner

aptitude install python-twisted python-pycryptopp
Créer un utilisateur kippo

Code : Tout sélectionner

adduser kippo

Créer un dossier /usr/share/kippo

Code : Tout sélectionner

mkdir /usr/share/kippo
 cd !$
Vous pouvez télécharger le ZIP depuis github

Ou plus simplement via SVN :

Code : Tout sélectionner

 svn checkout http://kippo.googlecode.com/svn/trunk/ ./kippo 
Décompresser les fichiers dans /usr/share/kippo

Donner tous les droits à l'utilisateur kippo

Code : Tout sélectionner

chown -R kippo.kippo /usr/share/kippo

Déplacer le fichier de configuration :

Code : Tout sélectionner

mv kippo.cfg.dist kippo.cfg
Kippo sur le port 22/TCP

Par défaut, Kippo écoute sur le port 22/TCP. Il faut être super utilisateur (root) pour pouvoir écouter sur les ports bas c'est à dire ceux inférieurs à 1024. Il existe deux manières de faire écouter kippo sur le port 22/TCP soit avec iptables soit avec authbin.

Si vous avez déjà un serveur SSH sur le port 22/TCP,
Éditer le fichier /etc/ssh/sshd_config
Changer le port pour éviter le conflit

Image

Relancer le serveur SSH

Code : Tout sélectionner

service sshd restart


iptables

Pour effectuer une redirection de port 22/TCP vers 2222/TCP

Code : Tout sélectionner

# accept traffic to the normal ssh port
  iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
  # accept traffic on the port kippo is listening on
  iptables -A INPUT -i eth0 -p tcp --dport 2222 -j ACCEPT
  # direct traffic inbound on port 22 to port 2222
  iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j REDIRECT --to-port 2222

nb: vous pouvez ajouter ce script à la fin de /etc/rc.local


authbin

Installer authbin

Code : Tout sélectionner

aptitude install authbind

Puis effectuer ces commandes

Code : Tout sélectionner

touch /etc/authbind/byport/22
   chown kippo /etc/authbind/byport/22
   chmod 777 /etc/authbind/byport/22
Changer le port d'écoute en modifiant /usr/share/kippo/kippo.cfg

Code : Tout sélectionner

  # Port to listen for incoming SSH connections.
   #
   # (default: 2222)
    ssh_port = 2222
Changer la valeur à cet emplacement

Code : Tout sélectionner

   # Port to listen for incoming SSH connections.
   #
   # (default: 2222)
   ssh_port = 22
Éditer /usr/share/kippo/start.sh

Code : Tout sélectionner

twistd -y kippo.tac -l log/kippo.log --pidfile kippo.pid
Modifier par

Code : Tout sélectionner

authbind --deep twistd -y kippo.tac -l log/kippo.log --pidfile kippo.pid

Démarrer kippo

Lancer le script "start.sh"
Se connecter au serveur SSH de kippo (par défaut root/123456).

Les journaux sont dans : /usr/share/kippo/log/kippo.log
Les éléments téléchargés dans : /usr/share/kippo/dl/

Les utilisateurs SSH sont dans : /usr/share/kippo/data/userdb.txt
Par défaut, vous avez root avec le mot de passe 123456
Ci-dessous un fichier "userdb.txt" un peu plus complet :

Code : Tout sélectionner

adm:0:adm123
adm:0:adm1234
adm:0:admin
admin:0:123
admin:0:1234
admin:0:12345
admin:0:123456
admin:0:1234qwer
admin:0:1234qwerty
admin:0:1q2w3e
admin:0:abc123
admin:0:abcd1234
admin:0:admin
admin:0:admin123
admin:0:admin1234
admin:0:qwer1234
administration:1000:admin
administrator:0:adm
administrator:0:administrator
administrator:0:administrator123
administrator:0:sysadm
administrator:0:sysadmin
arianne:2000:arianne
astrid:2000:astrid
bacula:1000:bacula
barbara:2000:barbara
beci:1000:beci
birgit:1000:birgit
boris:1000:boris
brigitte:1000:brigitte
britta:1000:britta
build:1000:buid123
build:1000:build
canna:1000:canna
canna:1000:canna123
carla:1000:carla
carola:1000:carola
carolin:1000:carolin
catharina:1000:catharina
celine:1000:celine
charlotte:1000:charlotte
christa:1000:christa
christel:1000:christel
christiane:1000:christiane
christine:1000:christine
connie:1000:connie
corinna:1000:corinna
cornelia:1000:cornelia
dagmar:1000:dagmar
dani:1000:dani
daniela:1000:daniela
diana:1000:diana
dorika:1000:dorika
doris:1000:doris
dorjan:1000:dorjan
dorothee:1000:dorothee
dorottya:1000:dorottya
duci:1000:duci
edith:1000:edith
edvard:1000:edvard
effi:1000:effi
eike:1000:eike
elek:1000:elek
elemer:1000:elemer
elena:1000:elena
elfi:1000:elfi
eli:1000:eli
eliane:1000:eliane
elisabeth:1000:elisabeth
elke:1000:elke
ellen:1000:ellen
elli:1000:elli
elsa:1000:elsa
emilie:1000:emilie
emma:1000:emma
endre:1000:endre
erika:1000:erika
erneszt:1000:erneszt
ernesztina:1000:ernesztina
errsike:1000:errsike
erssike:1000:erssike
erszok:1000:erszok
ervin:1000:ervin
erzebet:1000:erzebet
erzsebet:1000:erzsebet
erzsi:1000:erzsi
erzsok:1000:erzsok
eszter:1000:eszter
eszti:1000:eszti
etel:1000:etel
etilka:1000:etilka
eva:1000:eva
evacska:1000:evacska
evike:1000:evike
ferang:1000:ferang
ferenc:1000:ferenc
fereng:1000:fereng
ferike:1000:ferike
ferke:1000:ferke
ferko:1000:ferko
filip:1000:filip
firenze:1000:firenze
flora:1000:flora
florka:1000:florka
franci:1000:franci
franciska:1000:franciska
francziska:1000:francziska
franziska:1000:franziska
frauke:1000:frauke
fredek:1000:fredek
frici:1000:frici
fridrik:1000:fridrik
frigyes:1000:frigyes
fulop:1000:fulop
gabi:1000:123
gabi:1000:1234
gabi:1000:gabi
gabor:1000:123
gabor:1000:1234
gabor:1000:gabor
gabriele:1000:gabriele
gazsi:1000:gazsi
geller:1000:geller
gellert:1000:gellert
gerda:1000:gerda
gergeli:1000:gergeli
gergely:1000:gergely
gerlinda:1000:gerlinda
gertrud:1000:gertrud
gisela:1000:gisela
gottfrid:1000:gottfrid
gretchen:1000:gretchen
grethe:1000:grethe
guest:1000:123
guest:1000:1234
guest:1000:12345
guest:1000:123456
guest:1000:1q2w3e
guest:1000:abc123
guest:1000:abcd1234
guest:1000:asdfgh
guest:1000:guest
guest:1000:guest1234
guest:1000:guestaccount
guest:1000:qwerty
gwendolin:1000:gwendolin
gyala:1000:gyala
gyoergy:1000:gyoergy
gyorgy:1000:gyorgy
gyorgyi:1000:gyorgyi
gyula:1000:gyula
gyuri:1000:gyuri
gyurka:1000:gyurka
gyuszi:1000:gyuszi
hadoop:1000:hadoop
hadoop:2000:123qwe
hadoop:2000:hadoop
hajna:1000:hajna
hajnal:1000:hajnal
hanna:1000:hanna
hannelore:1000:hannelore
hedwig:1000:hedwig
heidi:1000:heidi
heidrun:1000:heidrun
heike:1000:heike
helene:1000:helene
helga:1000:helga
hilde:1000:hilde
hlse:1000:hlse
ibolya:1000:ibolya
ignac:1000:ignac
ildiko:1000:ildiko
ilka:1000:ilka
illes:1000:illes
ilona:1000:ilona
ilonka:1000:ilonka
iluska:1000:iluska
imre:1000:imre
imri:1000:imri
ina:1000:ina
ines:1000:ines
inge:1000:inge
ingeborg:1000:ingeborg
ingrid:1000:ingrid
iosif:1000:iosif
iosif:1000:iosif123
irene:1000:irene
iris:1000:iris
isa:1000:isa
isabella:1000:isabella
jasmine:1000:jasmine
jenifer:1000:jenifer
jessica:1000:jessica
jill:1000:jill
johanna:1000:johanna
john:1000:john
josephine:1000:josephine
judith:1000:judith
judith:2000:judith
julia:1000:julia
julianne:1000:julianne
julie:1000:julie
jutta:1000:jutta
kaethe:1000:kaethe
karin:2000:karin
kozos:1000:kozos
levelek:1000:levelek
natalia:1000:natalia
natalia:1000:natalia123
nobody:1000:nobody
oracle:2000:123456
oracle:2000:oracle
perger:1000:perger
postgres:2000:postgres
postgres:2000:postgres123
prime:1000:prime
pulse:1000:pulse
root:0:1234
root:0:123456
root:0:123456@ABC
root:0:12345@ABC
root:0:1234765a
root:0:12348765a
root:0:1234@ABc
root:0:1234@ABC
root:0:1234QWERasdf
root:0:123654a
root:0:123abc$%^
root:0:123@ABc
root:0:123@ABC
root:0:123qwe
root:0:123QWEasd
root:0:123qweasdzxcvbn
root:0:123QWERasdf
root:0:123QWERASDF
root:0:a123654
root:0:admin
root:0:admin@123
root:0:ariane
root:0:hadoop
root:0:kikoo
root:0:wubao
root:0:oqcnwl
root:0:1234QWERasdf
root:0:123QWEasd
root:0:123QWERasdf
root:0:123QWERASDF
root:0:Password01!
root:0:P@ssw0rd!@
root:0:P@ssw0rd!@#
root:0:P@ssw0rd!@#$
root:0:P@ssw0rd1
root:0:P@ssw0rd!11111
root:0:P@ssw0rd12
root:0:P@ssw0rd123
root:0:QWE123asd
root:0:QWER1234asd
root:0:QWER1234ASD
rpcuser:1000:rpcuser
sarah:2000:sarah
software:1000:software
students:1000:students
sulixra:1000:sulixra
syslog:1000:syslog
teachers:1000:teachers
test:2000:123
test:2000:test
vadim:1000:vadim
zenoss:1000:zenoss
zope:2000:zope
Exemple de logs avec connexions

Deux exemples de logs avec connexions SSH réussies sur kippo.
L'attaquant a tenté d'installer des backdoors (porte dérobées) sur Linux.
Attaques observées et rapportées dans l'actualité : Operation Distributed Dragon

Image

Image

La trace conduira à un espace chinois qui contient des trojans Linux pour Doser.

Image

Détections :
SHA256: 7877e2c3463478c9d5349ec203d80df390c27eefbd0499e7d4211ac5facb2331
Nom du fichier : 2480032
Ratio de détection : 15 / 55
Date d'analyse : 2015-07-16 06:16:38 UTC (il y a 12 minutes)

Antivirus Résultat Mise à jour
AVG Linux/Generic_c.PF 20150715
AhnLab-V3 Linux/Flooder.646674 20150715
Avast ELF:Sotdas-A [Trj] 20150715
CAT-QuickHeal Linux.Ropys.P6b0 20150715
ClamAV Linux.Trojan.IptabLex 20150715
DrWeb Linux.Myk.5 20150715
ESET-NOD32 Linux/Agent.BM 20150715
Fortinet PossibleThreat.P0 20150715
GData Linux.Trojan.Agent.ERATTG 20150715
Ikarus Trojan.DDoS 20150715
Jiangmin TrojanDDoS.Linux.ax 20150714
Kaspersky HEUR:Trojan-DDoS.Linux.Sotdas.a 20150715
NANO-Antivirus Trojan.Unix.Sotdas.dsqiao 20150715
Qihoo-360 Trojan.Generic 20150716
Sophos Linux/Flood-JC 20150715
SHA256: 9dce643aec7352b303be3adbca9a986855d6d5f45e7bcd391d88195dd1330c5f
Nom du fichier : S24100
Ratio de détection : 20 / 55
Date d'analyse : 2015-07-16 06:13:21 UTC (il y a 16 minutes)

Antivirus Résultat Mise à jour
AVG Linux/BackDoor_c.CL 20150715
AhnLab-V3 Linux/Backdoor.1223123.B 20150715
Antiy-AVL Trojan/Generic.ASELF.728 20150715
Avast ELF:Elknot-AS [Trj] 20150715
CAT-QuickHeal Linux.DnsAmp.a586 20150715
ClamAV Linux.Trojan.Agent 20150715
DrWeb Linux.BackDoor.Gates.9 20150715
ESET-NOD32 Linux/Setag.B.Gen 20150715
Fortinet ELF/Ganiw.A!tr 20150715
GData Linux.Trojan.Siggen.D 20150715
Ikarus Trojan.Linux.Agent 20150715
Jiangmin Backdoor/Linux.km 20150714
Kaspersky HEUR:Backdoor.Linux.Ganiw.a 20150715
Microsoft Backdoor:Linux/Setag.C 20150715
NANO-Antivirus Trojan.Unix.Ganiw.ditcrf 20150715
Qihoo-360 Trojan.Generic 20150716
Rising NORMAL:Backdoor.Linux.Flood.a!1616113 20150713
Sophos Linux/DDoS-BD 20150715
Symantec Linux.Chikdos.B!gen2 20150715
Zillya Trojan.Agent.Linux.12 20150715
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas !
Comment protéger son PC des virus
Windows 11 : Compatibilité, Configuration minimale requise, télécharger ISO et installer Windows 11

Comment demander de l'aide sur le forum
Evaluer le site malekal.com
Partagez malekal.com : n'hésitez pas à partager les articles qui vous plaisent sur la page Facebook du site.
Malekal_morte
Messages : 116046
Inscription : 10 sept. 2005 13:57

Re: kippo: Honeypot SSH

par Malekal_morte »

Suite à nos remontées de codes malveillants grâce aux honeypost SSH, les intrus ont ajoutés des vérifications qui leurs permettent de détecter la présence d'un environnement simulé. Les attaquants lançaient tout simplement une commande "echo -n test" ce que Kippo ne gère pas par défaut : les paramètres sur la commande echo retournait "-n test" alors qu'avec un système classique ça aurait du retourner "test".
kippo_echo.png
kippo_echo_2.png
De ce fait, j'ai amélioré la gestion de la commande echo dans Kippo.
Le code qui gère ces commandes sont situées dans:
ls /usr/share/kippo/kippo/commands/
adduser.py adduser.pyc apt.py apt.pyc base.py base.pyc dice.py dice.pyc fs.py fs.pyc __init__.py __init__.pyc last.py last.pyc ls.py ls.pyc malware.py malware.pyc ping.py ping.pyc ssh.py ssh.pyc tar.py tar.pyc wget.py wget.pyc
Et voici la nouvelle class echo

Code : Tout sélectionner

class command_echo(HoneyPotCommand):
    def call(self):
        if len(self.args) and self.args[0].strip().count('-n'):
                self.writeln(' '.join(self.args[1:]))
        else:
                self.writeln(' '.join(self.args))
commands['/bin/echo'] = command_echo
D'autre part kippo ne gère pas non plus la commande SSH -V qui doit retourner la version du client SSH.
J'ai par conséquent modifié le ssh.py comme suit :

Code : Tout sélectionner

lass command_ssh(HoneyPotCommand):
    def start(self):
        try:
            optlist, args = getopt.getopt(self.args,
                '-1246AaCfgKkMNnqsTtVvXxYb:c:D:e:F:i:L:l:m:O:o:p:R:S:w:V:')
        except getopt.GetoptError, err:
            self.writeln('Unrecognized option')
            self.exit()
        if self.args[0] == '-V':
            self.writeln('OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015')
            self.exit()
            return
        if not len(args):
            for l in (
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas !
Comment protéger son PC des virus
Windows 11 : Compatibilité, Configuration minimale requise, télécharger ISO et installer Windows 11

Comment demander de l'aide sur le forum
Evaluer le site malekal.com
Partagez malekal.com : n'hésitez pas à partager les articles qui vous plaisent sur la page Facebook du site.
  • Sujets similaires
    Réponses
    Vues
    Dernier message

Revenir à « Tech, Tips & Tricks »