Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.

Pause-café #43

Mars 2007


Sécurité : mettre votre I5 sur le net ?


Paramètres de sécurité pour connecter un system i à Internet

 

1/ Paramétrage IP

  • deuxième carte, deuxième interface (adresse IP)
  • voir les routes
  • CHGTCPA
    • Enlever IP Forwarding (fonction de passerelle)
    • enlever IP Source Routing (réponse aux Loose Source and Record Route[LSRR], utilisé par Traceroute)

2/ Filtrage IP

sous iSeries navigator

Autoriser ports 80 et 443
   # ----------------------------------------------------------------------
   # Instructions permettant le service HTTP entrant HTTP(80) et HTTPS(443)
   # ----------------------------------------------------------------------
   INCLUDE FILE = /QIBM/UserData/OS400/TCPIP/PacketRules/Services.i3p
   FILTER SET HTTP_INBOUND ACTION = PERMIT DIRECTION = OUTBOUND SRCADDR = 1.2.3.4 DSTADDR = * SERVICE = HTTP_80_FS JRN = OFF
   FILTER SET HTTP_INBOUND ACTION = PERMIT DIRECTION = INBOUND SRCADDR = * DSTADDR = 1.2.3.4 SERVICE = HTTP_80_FC JRN = OFF
   FILTER SET HTTP_INBOUND ACTION = PERMIT DIRECTION = OUTBOUND SRCADDR = 1.2.3.4 DSTADDR = * SERVICE = HTTP_443_FS JRN = OFF
   FILTER SET HTTP_INBOUND ACTION = PERMIT DIRECTION = INBOUND SRCADDR = * DSTADDR = 1.2.3.4 SERVICE = HTTP_443_FC JRN = OFF
   FILTER_INTERFACE LINE = ETHERNET SET = HTTP_INBOUND
   # ---------------------------------------------------------------------

Puis activez, sur la bonne interface

Retrait : en cas de problème, utiliser la commande RMVTCPTBL

Journaliser les rejets ? Ajouter :

   FILTER SET journal ACTION = DENY DIRECTION = INBOUND SRCADDR = * DSTADDR = 1.2.3.4 PROTOCOL = TCP DSTPORT = * SRCPORT = * JRN = FULL
   FILTER_INTERFACE LINE = ETHERNET SET = HTTP_INBOUND, journal
Journal -> QIPFILTER dans QUSRSYS

3/ Serveurs

Voir la liste des serveurs IP à démarrer


attention à :

  • DDM/IP sans mot de passe = CHGDDMTCPA PWDRQD(*no)
  • REXEC : commandes à distance
  • POP : permet l'énumération des profils utilisateurs

« binder » quand c'est possible (mettre le serveur à l'écoute sur la bonne adresse IP et non sur toutes)

ici SMTP, pour Apache, voyez la directive listen


Voir les points d'exit :
avec iSeries Navigator (Administration d'application avec un clic droit sur le nom de système)
ou en mode commande (WRKFCNUSG)

  • administration d'applications

    Vous indiquez ici, quels sont les droits d'utilisation pour un utilisateur "normal", pour un utilisateur ayant tous les droits (*ALLOBJ)

    - odbc

    - ftp

    - etc ...

    bien sur, ce que vous avez dit sur un plan général, peut-être affiné par utilisateur ou par groupe


    Puis choisissez l'onglet Applications et l'option concernée dans "Accès pour"


  • ou bien utilisez directement WRKREGINF, écrivez alors un programme et associez le par l'option 8
                           Work with Registration Information                      

    Type options, press Enter.
    5=Display exit point 8=Work with exit programs

    Exit
    Exit Point
    Opt Point Format Registered Text
    QIBM_QSY_RST_PROFILE RSTP0100 *YES Restore User Profile
    QIBM_QSY_VLD_PASSWRD VLDP0100 *YES Validation de mot de passe
    QIBM_QTF_TRANSFER TRAN0100 *YES Original File Transfer Function
    QIBM_QTG_DEVINIT INIT0100 *YES Telnet Device Initialization
    QIBM_QTG_DEVTERM TERM0100 *YES Telnet Device Termination
    QIBM_QTMF_CLIENT_REQ VLRQ0100 *YES FTP Client Request Validation
    QIBM_QTMF_SERVER_REQ VLRQ0100 *YES FTP Server Request Validation
    QIBM_QTMF_SVR_LOGON TCPL0100 *YES FTP Server Logon
    QIBM_QTMF_SVR_LOGON TCPL0200 *YES FTP Server Logon
    QIBM_QTMF_SVR_LOGON TCPL0300 *YES FTP Server Logon
    QIBM_QTMX_SERVER_REQ VLRQ0100 *YES REXEC Server Request Validation
Voyez la documentation sur les points d'exit serveurs à http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/rzaiq/rzaiqreferenceexit.htm


4/ politique générale de sécurité

  • Valeurs systèmes
    • QSECURITY
          40 est la bonne valeur
    • politique de mot de passe
      -à vous de voir ce qui est acceptable (le pire c'est le post-it sur l'écran)
      -pensez à QPWDLVL(2) : mots de passe complexes.
    • autre paramètres (QMAXSIGN, QINACTITV, QLMTSECOFR, etc...)
      -il faut désactiver les profils au bout de n tentatives d'intrusion (3 ? )
      -est-ce bien utile de désactiver les terminaux depuis l'arrivée de TELNET ?
      - c'est une bonne idée de limiter l'accès QSECOFR aux écrans explicitement autorisés
           (utiliser dans la vie courante un outils comme notre freeware SU )
    • On peut verrouiller certaines valeurs systèmes (celles liées à la sécurité), sous DST :
      STRSST, option 7
                           Work with System Security                           
      System: AS400
      Type choices, press Enter.

      Allow system value security changes . . . . . 1 1=Yes, 2=No <---
      Allow new digital certificates . . . . . . . 1 1=Yes, 2=No
      Allow a service tools user ID with a
      default and expired password to change
      its own password . . . . . . . . . . . . . . 2 1=Yes, 2=No

  • Voir Sécurité/Configuration dans iSeries Navigator

    clic droit sur l'option sécurité (si vous êtes QSECOFR), vous affiche un assistant.

    celui-ci, après vous avoir posé quelques questions, fait la liste de vos valeurs système, affiche la valeur en cours et la valeur sugérée et vous génère un rapport expliquant en détail tout cela.

    Attention, la dernière fenêtre vous propose d'appliquer immédiatement !


  • Gestion des profils :
    • profils ayant un mot de passe par défaut -> GO SECTOOLS
      SECTOOLS                      Outils de sécurité                              
      Système: AS400
      Choisissez l'une des options suivantes :

      Gestion des profils
      1. Analyser les mots de passe par défaut <-- ANZDFTPWD

      2. Afficher la liste des profils actifs
      3. Modifier la liste des profils actifs
      4. Analyser l'activité des profils

      5. Afficher le planning d'activation
      6. Modifier le planning d'activation

      7. Afficher le planning de péremption
      8. Modifier le planning de péremption

      9. Imprimer les postes internes de profil
      A suivre...

    • profils avec *ALLOBJ

      passez la commande DSPUSRPRF dans un OUTFILE, par curiosité faites une jointure avec QUSRSYS/QASECPWD, généré par ANZDFTPWD
    • profils non connectés depuis x mois

      SECTOOLS , option 4 (les profils "inactifs", sont automatiquement désactivés)
    • profils avec LMTCPB(*NO)

      réservé aux personnel informatique, pour les autres vous pouvez autoriser des commandes particulières par
      CHGCMD ALWLMTUSR(*YES) rendant cette commande disponible aux profils ayant LTMCPB(*YES)

    • profils IBM :
      • ont-ils le mot de passe par défaut ?
        -> GO SETUP , option 11
      • Sont -ils actifs ?
        -> inutile pour QSRV, QSRVBAS
      • Attention aux mots de passe DST

  • Droits pas défaut sur les objets
    • opter pour l'une des deux solutions pour *PUBLIC
      • *USE : tout le monde peut voir, pas de confidentialité
      • *EXCLUDE : droits explicites nécessaires

    • vérifier les droits du(des) profils « WEB »(celui utilisé dans vos pages php, par exemple), sur la base particulièrement.
    • n'oubliez pas les droits d'IFS, dans votre politique générale

  • profil de groupe/PGP
    • un profil peut appartenir à 16 groupes
      un groupe représentant alors un besoin sur une application
    • la notion de Primary Group Profil, permet de gagner en performance
      • les droits de *PUBLIC et du PGP sont stockés avec l'objet
      • les droits privés, eux, sont dans le profil concerné, doù le besoin de SAVSECDTA
      • le PGP doit être un profil de groupe
      • le PGP ne doit pas être le propriétaire
        (la notion de propriété doit être réservée à un profil spécifique, sans mot de passe)
      • il est fixé par CHGOBJPGP
    • listes d'autorisation
      • l'OS fait du cache sur les 16 dernières utilisées
      • la gestion de n objets protégés par une liste d'autorisation est beaucoup plus simple, puisque qu'une manipulation va impacter n objets.
      • assigner une liste d'autorisation peut se faire
        • en masse, par la commande GRTOBJAUT, penser alors au paramètre REPLACE(*YES)
        • pour les objets à venir, par CHGLIB xxx CRTAUT(nom-de-la-liste)
        • CHGAUT pour IFS, le paramètre SUBTREE permet de répercuter en cascade

  • Compilez les programes en *OWNER pour les cas particuliers, qui doivent rester des cas particuliers
  • Audit
    • Audit au niveau objet (fichiers "paie", par exemple)
      • CHGOBJAUD OBJAUD(*NONE | *CHANGE | *ALL)
      • *USRPRF: ca dépend de l'utilisateur
    • Audit pour les utilisateurs sensibles
      • CHGUSRAUD OBJAUD(si l'utilisateur manipule un objet avec OBJAUD(*USRPRF)
      • AUDLVL(actions à tracer)
        • *CMD : toutes les commandes passées
        • *CREATE : les créations d'objets
        • *DELETE : les destructions d'objets
        • *SECURITY : actions système ayant trait à la sécurité
    • Audit de certaines actions systèmes (QAUDLVL)
      • *AUTFAIL : manque de droits
      • *NETFAIL : défaillance réseau
      • *PGMFAIL : programes "plantés"

    • Mise en place :
      • création d'un récepteur et d'un journal QAUDJRN dans QSYS
      • renseignement de la valeur système QAUDCTL
      • QAUDLVL, QAUDLVL2 concernent tous les profils, Attention aux volumes.

5/ authentification HTTP

  • liste de validation (notion d'"utilisateur internet")
    • CRTVLDL
    • Passer par l'administration HTTP (sur le port 2001) pour gérer les entrées

  • authentification applicative (par N° d'adhérent, de client, etc...)
    • mettre en place HTTPS (config Apache uniquement, sans incidence sur la codification java/php)
      avec l'authentification, sinon les mots de passe circulent en clair

    • on peut aussi configurer FTPS, pour ceux qui veulent monter un Serveur FTP
      voyez alors les points d'exit pour :
      • configurer une entrée "anonymous"
      • limiter l'utilisation de commandes CL, etc...
      • voyez si vous ne devez pas préférer HTTP et les fonctions upload (transfert de fichier depuis le client)
  • différencier les profils pour différencier les applications java/php si elles se multiplient.
    vérifier alors :
    • que ce profil ne peux pas ouvrir de session 5250, ni passer de commandes
    • voyez l'audit (*DELETE par exemple) pour ce profil particulièrement.


6/ Surveillance

  • Moniteurs dans gestion centralisée
    • sur la CPU utilisée par le sous système Zend
      • Moniteurs/Travail

        Indiquez les coordonnées des travaux à surveiller (par exemple tout le sous système Zend)


        indiquez ce qui constitue un évenement anormal (UC consommée à plus de xx %)
        -> associez une commande OS/400 à lancer (envoi de message, de mail, etc...)
    • sur l'espace disque
      • utiliser alors Moniteurs système

  • V5R40 : détection d'intrusions

    On peut détecter
    • les problèmes de fragements IP
        datagrames trop gros ou mal numérotés
    • les paquets malformés
    • SYN floods (débordements)
        de multiples connections sont initialisées avec un tiers usurpé et jamais achevées
    • redirections ICMP
    • ECHO perpétuel
    • utilisation de LSRR (voir en début de cours)
    • le scannage de ports
    • Mise en place
      • Mettre en place QOS
      • Activer l'audit (QAUDCTL)
      • Mettre *ATNEVT dans QAUDLVL ou QAUDLVL2
      • Copier /QIBM/PRODATA/OS400/QOS/IDSPOLICY.CONF dans /QIBM/USERDATA/OS400/QOS/ETC et éditez le.
      • démarrer QOS par STRTCPSVR *QOS

7/ Coding :

  • Injection SQL et XSS

    • Injection SQL
      • - un formulaire demande un N° de client
      • - la requête associée est DELETE FROM CLIENTS WHERE NOCLI = $nocli
      • - un malveillant saisi "1 or 0=0"
      • ==> il n'y a plus rien dans le fichier client !
    • XSS
      • On arrive à insérer du Javascript dans la base, qui s'affiche tel que et agit sur les navigateurs qui consultent (par exemple)

    • Parade : vérifier les données recues !

      vérification de la longueur et du type des variables
        -numérique
        -date
        -email, etc...
      désactiver tout ce qui peut ressemble à du html ou du code

    • crypter les données sensibles (clé, mot de passe, etc..) avec ENCRYPT_RC2 et ENCRYPT_TDES

    • "Préparer" les requêtes, quand c'est possible (db2_connect sous PHP, par exemple)

      les requêtes préparées s'exécutent en deux fois :
      1. Préparation
        le moteur SQL calcul un plan d'accès, optimise et attend des paramètres

        Ex (php): $stmt = db2_prepare($db, "select * from clients where nocli = ? or depcli < ?") ;
      2. Exécution
        lancement de la requête avec attribution de valeurs pour les paramètres attendus

        Ex (php): $rc = db2_execute($stmt, array(2222, 44) ) ;

        si les paramètres envoyés ne sont corrects, cela sera refusé par SQL qui attendait 2 informations numériques du fait du PREPARE

    • Faire les mises à jour par procédures cataloguées

      Procédures cataloguées

      une procédures cataloguées peut être écrite en SQL ou externe.

      Dans le cas d'une procédure externe, il ne s'agit que "d'enregistrer" en tant que procédure un exécutable existant (description destinée à SQL et enregistrée dans SYSPROCS et SYSPARMS de QSYS2)

      • dans le cas d'un pgm ILE (RPG4 ou CLLE), cette information est aussi stockée dans l'exécutable, se faisant une simple restauration re-enregistre cet exécutable en tant que procédure.
      • dans le cas d'un pgm GAP3 ou CL simple(CLP), il faut redéclarer la procédure par CREATE PROCEDURE
        (script SQL lancé par iSeries Navigator ou par RUNSQLSTM)

PHPet php.ini

  • Ne pas afficher les erreurs, mais un message générique ("logger" quand même)
    • display_error dans php.ini à Off
  • consulter le fichier error_log,généré par apache, régulièrement
  • les procédures cataloguées ne doivent jamais "planter" (gestion d'erreur rigoureuse, voir Monitor/On-error en RPG4)
  • Autres paramétres :
    • register_global à Off
      • création automatique des variables de formulaire, c'est vraiment dangeureux
    • error_reporting = E_ALL, en dev. uniquement
      • indique les variables utilisées, non déclarées
    • masquer php (ne pas montrer que c'est du php en masquant l'extension) ?
      • si oui, c'est de la configuration Apache (redéfinition des types mime, par exemple)

  • Voyez http://www.php.net/manual/fr/security.php



Top


Copyright © 1995,2007 VOLUBIS