Keepass, Putty et les connexions SSH automatiques

Posted by & filed under Système.

Comment enregistrer des connexions SSH dans Keepass et les lancer automatiquement avec Putty :

Allez dans le menu Scheme-Specific :

Et créer un nouveau scheme ssh2 :

cmd://putty.exe -ssh {USERNAME}@{URL:RMVSCM} -pw {PASSWORD}

Déposer l’exécutable putty.exe dans le même dossier que Keepass (pour moi : C:Program Files (x86)KeePass Password Safe 2)

 

On crée une entrée de cette manière (noter le ssh2://IP dans le champ URL) :

 

On lance ensuite la connexion en double-cliquant dans la zone rouge. Putty s’ouvre alors déjà loggué sur le shell distant :

 

En espérant que cela vous soit utile.

Configuring SCP on Checkpoint SecurePlatform (SPLAT)

Posted by & filed under Sécurité.

The following error is found when tyring to scp to a SPLAT unconfigured for it:

 [server] scp upgrade_export.tgz admin@xx.xx.xx.xx:/tmp
The authenticity of host ‘xx.xx.xx.xx (xx.xx.xx.xx)’ can’t be established.
RSA key fingerprint is 34:ff:52:0e:d6:57:53:12:d5:60:aa:7e:fa:e1:91:a8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘xx.xx.xx.xx’ (RSA) to the list of known hosts.
admin@xx.xx.xx.xx’s password:
lost connection

To resolve this alow SCP access with these steps:

  • Create a dedicated user to scp (it is not recommended to change root or your admin account):
useradd scpuser
  • Add a password for this user:
passwd scpuser
  • Change user shell to bash
chsh -s /bin/bash scpuser
  • Create scpusers file which allow SCP connection for listed users
touch /etc/scpusers
  • Edit the file and add the users you want to allow for scp
echo "scpuser" >> /etc/scpusers
  • Restart the ssh service
service sshd restart

And that’s it. You can now transfer/retrieve files with SCP to/from SPLAT.

Communication

Posted by & filed under Inutile.

Entre :
Ce que je pense,
Ce que je veux dire,
Ce que je crois dire,
Ce que je dis,
Ce que vous avez envie d’entendre,
Ce que vous croyez entendre,
Ce que vous entendez,
Ce que vous avez envie de comprendre,
Ce que vous croyez comprendre,
Ce que vous comprenez,
Il y a dix possibilités qu’on ait des difficultés à communiquer.
Mais essayons quand même…

Bernard Werber

Activation du SSH et gestion des clefs sur ASA 8.x

Posted by & filed under Sécurité.

Devrant écrire une documentation rapide pour l’activation et la regénération de clefs pour un ASA en version 8.x, la voici:

Configuration

A partir de la console en mode configuration (conf t):

ciscoasa(config)# enable password xxxxx

Il est recommandé de toujours mettre le mot de passe enable

ciscoasa(config)# username xxx password xxxx privilege 15

L’admin local et son mot de passe qui effectuera la connexion SSH. Pour plus d’infos sur les privilèges voir

ciscoasa(config)# aaa authentication ssh console LOCAL

Le mot clé local précise d’utiliser l’utilisateur défini dans la base locale à l’étape précédente. On peut utiliser d’autres moyen d’authentifications comme TACACS, RADIUS …

ciscoasa(config)# ssh a.b.c.d 255.255.255.0 inside

On précise quelles IPs ont le droit de se connecter en SSH et depuis quelles interfaces. A répéter sur toutes les interfaces ayant besoin d’être activées.

ciscoasa(config)# ssh timeout 30

Le temps d’inactivité autorisé avant déconnexion.

ciscoasa(config)# ssh version 2

On n’autorise que la version 2 de SSH. La 1 étant deprecated pour des raisons de sécurité.

ciscoasa(config)# domain-name monnom.com

Le nom de domaine à utiliser. La clé RSA est générée en utilisant le nom de domaine plus le nom du firewall

ciscoasa(config)# crypto key generate rsa modulus 2048

On génére une clef SSH RSA 2048bits.

ciscoasa(config)# wr

On écrit les clefs en mémoire pour ne pas les perdre après redémarrage.

Si on résume:

ciscoasa(config)# enable password xxxxx

ciscoasa(config)# domain-name monnom.com

ciscoasa(config)# username xxx password xxxx

ciscoasa(config)# aaa authentication ssh console LOCAL

ciscoasa(config)# ssh a.b.c.d 255.255.255.0 inside

ciscoasa(config)# ssh timeout 30

ciscoasa(config)# ssh version 2

ciscoasa(config)# crypto key generate rsa modulus 2048

ciscoasa(config)# wr

Visualisation

asa(config)# show ssh sessions ?

exec mode commands/options:
Hostname or A.B.C.D Show SSH sessions corresponding to SSH client IP
address
Hostname or X:X:X:X::X Show SSH sessions corresponding to SSH client IPv6
address
| Output modifiers

Sessions SSH en cours

asa(config)# show crypto key mypubkey rsa
Key pair was generated at: 12:48:08 UTC Feb 8 2012
Key name:
Usage: General Purpose Key
Modulus Size (bits): 1024
Key Data:

30819f30 0d06092a 864886f7 0d010101 05000381 8d003081 89028181 00bf9109
79f201ad 7f0edfc1 9192a31d 8da48eb6 f0cc3a37 2ce5472d 6b73523f 9e4f00fd
abdedeea e519cb86 f31bdbca 68a55367 b3fd95e1 cd692d8b 493f0e7e c2cbf8a3
af826c2c 53111c59 c3f2fb92 d6ac54a3 ac093afc c9027c76 3d8dcbed 51d44e34
d4a95ced 037e56da 8f9849f5 0d6d9014 dd95929f f77be2f2 8ce53eee 65020301 0001

Affichage de la clef RSA

Reconfiguration

Et en cas de changement de hostname ou de domain-name ? Il est alors recommandé de réinitialiser les clefs ssh.

Pour cela :

ciscoasa(config)# hostname nouveau-hostname

nouveau-hostname(config)# crypto key zeroize rsa

nouveau-hostname(config)# crypto key generate rsa modulus 2048

nouveau-hostname(config)# wr

Merge de fichiers KeepassX ou Keepass 1.x (.kdb)

Posted by & filed under Système.

J’ai eu le besoin de merger plusieurs fichiers base de données de Keepass. Si vous ne connaissez pas cet excellent gestionnaire de mot de passe allez faire un tour ici ! Son pendant Linux/Mac OS X est KeepassX compatible avec la branche 1.x de Keepass.

Ce script (rapidement fait) prend plusieurs fichiers d’export XML Keepass (Menu -> Exporter sous -> XML)
et les regroupent sous un fichier. Il prend l’entrée la plus récente en cas de conflit. Il affichera les conflits en sortie console.

La source est disponible ici pour ceux qui veulent la regarder et je l’ai également compilé ici pour ceux qui veulent faire un merge rapide.

Télécharger KeeMerge

Pour l’exécutable, le mettre dans le même dossier que les exports xml puis le lancer.

Il faut ensuite importer le merge.xml dans Keepass. Créer une nouvelle base puis Menu-> Importer -> XML Keepass 1.x.

from lxml import etree
import datetime, glob

class Password(object):
    def __init__(self, node):
        date= node.find("lastmodtime").text
        self.lastmodtime= datetime.datetime.strptime(date,"%Y-%m-%dT%H:%M:%S")
        self.uuid= node.find("uuid").text
        self.username= node.find("username").text
        self.password= node.find("password").text
        self.title= node.find("title").text
        self.node= node

    def __hash__(self):
        return hash(str(self.title)+str(self.lastmodtime)+str(self.uuid))

    def __eq__(self,other):
        return self.uuid==other.uuid and self.username==other.username and self.password==other.password and self.title==self.title


    def __str__(self):

        s = "%s (%s): [%s|%s] - %s" % (self.title,self.uuid,self.username,self.password,self.lastmodtime)
        return s

    def __repr__(self):

        s = "%s (%s): [%s|%s] - %s" % (self.title,self.uuid,self.username,self.password,self.lastmodtime)
        return s


def getTree(file):
    """
    Give the root and tree of the XML file
    """

    parser = etree.XMLParser(strip_cdata=False)
    tree = etree.parse(file, parser)
    root= tree.getroot()
    return tree ,root

def getpasswords(file):
    """
    Parse and return all the password of an xml exported by Keepass
    """

    tree, root = getTree(file)
    elements= []
    for e in root:
        elements.append(Password(e))
    return elements

def main():
    # give me your xmls
    xmls= glob.glob("*.xml")

    # a dict uniq by the uuid of the node
    uniquepasswords= dict()

    # all your passwords are belong to us
    passwords=[pwd for f in xmls for pwd in getpasswords(f)]

    # let's go marco
    for pwd in passwords:
        # do I know you ?
        if pwd.uuid in uniquepasswords:
            challenger= pwd
            champion= uniquepasswords[pwd.uuid]
            # If exact match, skips
            if challenger != champion:
                # challenger modified recently ?
                if challenger.lastmodtime > champion.lastmodtime:
                    print "####"
                    print "%s" % (challenger)
                    print "more recent than"
                    print "%s" % (champion)
                    print "Challenger wins"
                    uniquepasswords[pwd.uuid]= challenger
                elif challenger.lastmodtime < champion.lastmodtime:
                    print "####"
                    print "%s" % (challenger)
                    print "older than"
                    print "%s" % (champion)
                    print "Garbage"
        else:
            # hello you
            uniquepasswords[pwd.uuid]= pwd

    # Append xml nodes to root
    root= etree.Element("pwlist")
    for pwd in uniquepasswords.values():
        root.append(pwd.node)

    # Write to file
    et = etree.ElementTree(root)
    et.write("merge.xml", pretty_print=True, xml_declaration=True, encoding='utf-8', standalone='yes')

if __name__ == "__main__":
    main()

NCSI ou « connectivité limitée » sous Windows

Posted by & filed under Sécurité, Système.

Depuis Windows Vista et Seven lorsque vous connectez un ordinateur à un réseau filaire ou wifi l’icône vous indique l’état de la connexion: non connecté, connectivité limitée ou accès internet.

Cette information est obtenue avec NCSI ( Network Connectivity Status Indicator ). Cette fonctionnalité fonctionne de la manière suivante:

  1. NCSI effectue une requête DNS sur www.msftncsi.com, puis demande la page http://www.msftncsi.com/ncsi.txt. C’est un fichier texte contenant Microsoft NCSI.
  2. NCSI effectue une requête DNS sur dns.msftncsi.com. Cela résout normalement en 131.107.255.255. Si cette vérification échoue on a un problème de connectivité voire un DNS menteur. Mais cette vérification est le plus souvent utilisée lors d’une authentification requise par une page web (type FreeWifi, NeufWifi ou tout autre hotspot).

La fonction part d’une bonne intention mais on envoie quand même une requête à Microsoft avec son IP … et les logs sont gardés:

IIS logs are stored on the server at www.msftncsi.com. These logs contain the time of each access and the IP address recorded for that access. These IP addresses are not used to identify users, and in many cases, they are the address of a network address translation (NAT) computer or proxy server, not a specific client behind that NAT computer or proxy server.

Source

Si on souhaite désactiver cette fonction on peut le faire dans la base de registre:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNlaSvcParametersInternet
Under the Internet key, double-click EnableActiveProbing, and then in Value data, type: 0. The default for this value is 1. Setting the value to 0 prevents NCSI from connecting to a site on the Internet during checks for connectivity.

On peut également créer son propre serveur pour utiliser cette fonction en modifiant les entrées du registre correspondantes.

Après recherche on tombe sur des articles plus détaillées comme Super User.

Citation

Posted by & filed under Divers.

« Anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that ‘my ignorance is just as good as your knowledge.' »
L’anti-intellectualisme a été un fil conducteur faisant son chemin notre vie politique et culturelle, nourrie par la fausse idée que la démocratie signifie que « mon ignorance vaut autant que vos connaissances».

Isaac Asimov

UDP over SSH port forwarding

Posted by & filed under Système.

Il est courant d’utliser les tunnels SSH pour faire transiter divers flux TCP. Cependant on ne peut utiliser le port forwarding directement avec du TCP (exemple du DNS ou SNMP). Ce billet vous montre les étapes à effectuer pour atteindre ce but.

Etapes par étapes

Ouvrir un tunnel SSH avec TCP forward port

Depuis votre machine, se connecter au serveur SSH distant avec l’option -L pour utiliser le port forwarding :

local# ssh -L PORT_TCP_LOCAL:localhost:PORT_TCP_DISTANT IP_SERVEUR_SSH

La commande précédente transfère depuis le port_tcp_local de localhost vers le port_tcp_distant de server.

Mise en place de TCP to UDP sur le serveur

Sur le serveur SSH on ouvre un listener sur le port PORT_TCP_DISTANT qui transfèrera les données vers le port UDP du serveur voulu (par exemple dans le cas d’un DNS forwarding l’IP du resolveur DNS).
Avant tout il faut créer un FIFO qui fait office de transfert en local. Une fifo est une communication bidirectionnel entre deux processus. La fifo est à distinguer du pipe qui est unidirectionnel (gauche output vers droit input).

server# mkfifo /tmp/fifo
server# nc -l -p PORT_TCP_DISTANT < /tmp/fifo | nc -u IP_SERVEUR_UDP PORT_UDP_DISTANT > /tmp/fifo

Cela permet au trafic TCP du serveur SSH d’être transmis vers le le port du serveur distant portant le service UDP nous intéressant et de transmettre également le retour.

Mise en place du UDP sur TCP sur votre machine

Maintenant nous devons effectuer la manoeuvre opposée sur notre machine.

local# mkfifo /tmp/fifo
local# sudo nc -l -u -p PORT_UDP_LOCAL < /tmp/fifo | nc localhost PORT_TCP_LOCAL > /tmp/fifo

Cela permet au trafic UDP provenant du PORT_UDP_LOCAL d’être transféré dans le tunnel SSH écoutant sur le PORT_TCP_LOCAL

Illusions d’optique

Posted by & filed under Inutile.

Toute ces images sont fixes (jpg ou png). Et pourtant elles bougent ! N’hésitez pas à les ouvrir en grand dans un onglet pour mieux apprécier l’illusion.