pause-café
rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
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 navigatorAutoriser 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, journalJournal -> 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
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
- QSECURITY
- 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
- ont-ils le mot de passe par défaut ?
- profils ayant un mot de passe par défaut -> GO SECTOOLS
- 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
- opter pour l'une des deux solutions pour *PUBLIC
- 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
- un profil peut appartenir à 16 groupes
- 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.
- Audit au niveau objet (fichiers "paie", par exemple)
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)
- mettre en place HTTPS (config Apache uniquement, sans incidence sur
la codification java/php)
- 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...)
- Moniteurs/Travail
- sur l'espace disque
- utiliser alors Moniteurs système
- utiliser alors Moniteurs système
- sur la CPU utilisée par le sous système Zend
- 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
- les problèmes de fragements IP
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)
- 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 :- 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 < ?") ;
- 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
- Préparation
- 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)
- 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.
- Injection SQL
PHPet php.ini
- Ne pas afficher les erreurs, mais un message générique ("logger"
quand même)
- display_error dans php.ini à Off
- 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)
- si oui, c'est de la configuration Apache (redéfinition des
types mime, par exemple)
- register_global à Off
- Voyez http://www.php.net/manual/fr/security.php
Copyright © 1995,2007 VOLUBIS