Archives mensuelles : novembre 2018

[Sécurité] : scapy – scanner les réseaux wifi (SSID) et leur adresse MAC

Scapy, un mot qui peut faire peur car fait référence à certaines pratiques obscures en matière de sécurité. Effectivement, scapy fait partie des outils de base des hackers… peu importe leur couleur. Retrouvez la documentation en ligne ici et mes autres post python ici.

IMG-3211

Scapy permet notamment de faire de nombreuses opérations sur les réseaux comme sniffer, envoyer des paquets, scanner…

Ne vous inquiétez pas je ne suis pas obscure. Il s’agit simplement de l’envie de découvrir cet outil dont on entend si souvent parler. Aujourd’hui j’ai voulu découvrir comment scanner les réseaux wifi autour de moi (à priori rien d’illégale là-dedans… après cela dépend de ce que l’on fait avec le scan).

Première chose à faire installer scapy :

pip install scapy

C’est donc un simple module que je peux ajouter à python.

Je me reporte ensuite à cet article qui propose de scanner les réseaux wifi. Il me faut donc installer aircrack-ng pour avoir accès à la comande airmon-ng. Aircrack est un binaire qui permet de réaliser de nombreux opérations de pénétrations de réseaux wifi (cracjing de clé…).

└─ $ ▶ sudo apt-get install aircrack-ng

Airmon-ng va nous permettre de devenir observateur du réseau (sans action dessus). Je lance donc airmon sur mon interface wifi :

sudo airmon-ng start wlp3s0

Voilà pour la première étape donc. Maintenant il faut créer un fichier python qui va utiliser le module scapy (je me reporte à la page citée précédemment… on vera pour faire notre propre script plus tard).

Je créé un fichier scapy_scan.py avec ceci :

from scapy.a:qll import *
ap_list = []
def packetRecup (pkt) :
    if pkt.haslayer (Dot11) :
        if pkt.type == 0 and pkt.subtype == 8 :
            if pkt.addr2 not in ap_list :
                ap_list.append(pkt.addr2)
                return "Réseau SSID: %s et MAC address: %s " %(pkt.info, pkt.addr2)
sniff(iface = "mon0" , prn = packetRecup)

Que contient ce script ?

Conclusion : scapy est un outil qui à l’air simple à utiliser et à apprendre. Bien sûr il faut connaitre python avant toute chose et faire attention de ne pas partir sur des tentatives plus obscures dans l’utilisation de cet outil. Je pense que je me ferais encore quelques tests sur  mon réseau local notamment tenter de sniffer des paquets et de faire des envois car c’est un peu la base de l’outil.

Et vous vous utilisez scapy ?

[Linux] : générez une adresse MAC et changez la votre -> triche wifi

Avant de commencer par travailler sur votre adresse MAC, la première chose à faire est de vous créer une sauvegarde pour savoir faire demi-tour. Eh oui on ne change pas son adresse MAC sans filet de secours car elle correspond à votre matériel. J’imagine que vous savez comment faire ?

14:06:12 - oki @ doki ~ 
└─ $ ▶ ifconfig > backup_ifconfig.txt

Maintenant on peut commencer à bosser. Comment générer une adresse MAC ?

14:02:57 - oki @ doki ~ 
└─ $ ▶ openssl rand -hex 6 | sed 's/\(..\)/:/g; s/.$//'

On utilise donc openssl en mode random et en hexa. Et grâce à sed on ajoute les « : » et on nettoie la variable obtenue.

Maintenant on peut passer à la modification de l’adresse MAC. Petit rappel, l’adresse MAC de votre PC est définie en usine et quoiqu’il arrive vous ne pourrez pas changer cette adresse « physique ». Ainsi, avec un reboot de votre PC vous pourrez récupérer la bonne (de toute façon on a notre backup).

Alors pour changer cette adresse il faut que vous déterminiez votre interface principale avec ifconfig.

Ifconfig va aussi vous permettre de la changer de cette manière :

sudo ifconfig eth0 ether manouvelleadresse

Attention dans mon cas mon interface principale est eth0. Mais cela peut changer.

Donc si vous souhaitez intégrer la génération de l’adresse MAC et le changement en une ligne, voici la commande :

sudo ifconfig eth0 ether`openssl rand -hex 6 |\
sed 's/\(..\)/:/g; s/.$//'`

Vous venez de changer votre adresse MAC au niveau système.

Alors cette méthode, si simple, permet parfois de « hacker » ou plutôt tromper certains wifi (pas si courants). La triche se fera dès lors que vous tomberez sur des wifi avec des périodes gratuites (par exemple les 30 premières minutes). Dès le temps écoulé, vous faites un backup et vous lancez la commande et c’est reparti.

N’oubliez pas que vous pouvez récupérer votre adresse intiale en faisant un reboot de votre machine ou encore avec la commande.

sudo ifconfig eth0 ether votreancienneMAC

Retrouvez d’autres astuces linux et bash sur cette page.

[Ansible] – comment utiliser les gather_facts et tenir à jour un début de cmdb ?

Ansible regorge d’astuces qu’il faut engranger pour pouvoir aller plus loin et ne pas simplement installer des paquets sur des machines distantes. Par exemple, nous allons voir aujourd’hui une valorisation des gather_facts de ansible. Sur puppet, je crois que la même chose est réalisable avec facter.

Gather_facts c’est la possibilité d’utiliser des variables d’environnement ansible. Ce sont principalement des caractéristiques de la machine (interface, os…). Ces données vous vous en doutez seraient bien utiles dans une cmdb (centralisation d’informations de votre parc de machine).

Pour commencer cette démos nous allons commencer par créer quelques machines à l’aide de mon script maison (vous pouvez aussi le découvrir en vidéo désormais). Dans mon cas, j’ai 2 vm debian qui fonctionnent avec du ssh (merci docker).

└─ $ ▶ ./deploy-centre-sans-proxy-v2.sh --infos
#### Récap des conteneurs de tests ####
=> /oki-deb-vmparc3 - 172.17.0.3 - Utilisteur : oki / mdp:password
=> /oki-deb-vmparc2 - 172.17.0.2 - Utilisteur : oki / mdp:password

Maintenant nous allons configurer notre inventory hosts.yml très simplement :

all:  hosts:    172.17.0.2:    172.17.0.3:

Objectif ?

Notre souhait c’est d’utiliser les gather_facts et faire en sorte que ansible centralise tout cela sous forme de fichiers.html. Ainsi nous pourrons faire de la datavisualisation avec un apache installé localement (attention c’est pour la démo, c’est très moyen d’installer un serveur web sur une machine qui a la main sur tout votre parc).

Enfin, grâce à notre apache on pourra afficher dans un navigateur web. Et vous verrez ce qui compte c’est le principe car derrière c’est assez facile d’avoir des idées pour compléter tout cela pour avoir un bon début de cmdb.

Comment lister les gather_facts à notre dispostion ?

Les gather_facts sont accessibles via le module setup de ansible. Donc pour consulter toutes ces variables voici la commande à réaliser :

ansible all - i hosts.yml -u oki -m "setup"

La liste est assez longue et c’est plutôt une bonne nouvelle.

Faisons nos courses et retenons les variables :

  • inventory_hostname
  • ansible_default_ipv4.alias
  • ansible_architecture
  • ansible_distribution
  • ansible_distribution_version

Et on met tout cela en forme dans un template jinja2 pour générer à terme un fichier html :

<h1>Machine : {{ inventory_hostname }}</h1>
<ul>
<li>Interfaces : {{ ansible_default_ipv4.alias }}</li>
<li>Architecture : {{ ansible_architecture }}</li>
<li>OS : {{ ansible_distribution }}</li>
<li>Version : {{ ansible_distribution_version }}</li>
</ul>

Maintenant le playbook !

Voici le contenu de notre répertoire :

.
├── hosts.yml
├── playbook-cmdb.yml
└── templates
└── listing_ipv4.html.j2

Editons donc le playbook-cmdb.yml de la manière suivante :

---
- name: "[IP v4 listing]"
  hosts: all
  gather_facts: yes
  tasks:
    - name: "[IP v4 listing] - generate html"
      template:
        src: listing_ipv4.html.j2
        dest: "/var/www/html/{{ inventory_hostname }}.html"
      connection: local

Première chose on spécifie l’utilisation des gather_acts. Ensuite on utilise le module template pour faire appel au fichier jinja2. Puis on indique comme destination le répertoire de notre apache /var/www/html/ (de la machine master host). C’est aussi pour cela que nous spécifions connection : local.

Maintenant lançons la commande ansible-playbook :

ansible-playbook -i hosts.yml -u oki playbook-cmdb.yml

Et bingo :

PLAY [[IP v4 listing]] *******************************

TASK [Gathering Facts] *******************************
ok: [172.17.0.3]
ok: [172.17.0.2]

TASK [[IP v4 listing] - generate html] ***************
changed: [172.17.0.3]
changed: [172.17.0.2]

PLAY RECAP *******************************************
172.17.0.2 : ok=2 changed=1 unreachable=0 failed=0 
172.17.0.3 : ok=2 changed=1 unreachable=0 failed=0

Supprimons l’index de notre apache local : rm -f /var/www/html/index.html

Remarque : j’ai confié les droits de ce réprtoire à oki pour cet exercice

Et voici le résultat, une fiche par machine :

fiche-arbre

Puis la fiche de la machine :

fiche-cmdb.png

C’est bon tout ça non ? On comprend mieux l’intérêt des facts avec ce genre d’outils d’orchestration. Et ne vous inquiétez pas vous pouvez aisément pousser les fichier vers une autre machine qui portera un service apache de manière isolée.

[Linux] : rsync – entre deux machines en définissant le port à utiliser

Rsync est un super outil qui permet comme son nom le laisse deviner, de synchroniser des fichiers ou des répertoires. Il permet notamment de gagner du temps pour ne synchroniser que le nécessaire si une modification intervient. Bref une brave bête ce rsync.

Comment synchroniser un fichier ou un répertoire entre 2 machines en fixant un port particulier ?

rsync -avz -e "ssh -p $portutilise" utilisateur@serveur2:/chemin/source/ /chemin/destination/

Donc :

  • rsync -avz : mode archive (a), mode compressé (z) et verbose
  • -e pour lancer une commande en l’occurence la connexion ssh