Politique de Sécurité Et Analyse de Risques: Chapitre 1
Politique de Sécurité Et Analyse de Risques: Chapitre 1
Politique de Sécurité Et Analyse de Risques: Chapitre 1
Conjoncture La mise en réseau des systèmes informatiques s’est effectuée avec succès et
a permis de réduire encore plus les délais de réalisation des travaux. L’entreprise doit
maintenant répondre au souhait de la majorité des clients qui est de correspondre
directement avec le bureau d’étude via Internet pour transmettre tous les types de
documents (dossiers techniques, devis, appel d’offre, messages...).
L’entreprise a dernièrement perdu un marché : la rénovation de la mairie de Draguignan.
Lors de la présentation des projets, il est apparu de curieuses similitudes entre la maquette
virtuelle d’@RCHIMED et la proposition d’un concurrent de Nice. Le directeur d’@RCHIMED
soupçonne une compromission du projet qu’il avait présenté. Il a maintenant des craintes
sur la confidentialité de certains projets.
D’autre part, de plus en plus de contrats pour lesquels @ARCHIMED souhaite se
positionner sont conditionné par la capacité du cabinet à assurer la confidentialité relative
aux aspects techniques du projet. Par exemple, L’appel d’offre pour la rénovation de
certaines installations de la marine nationale de l’arsenal de Toulon entre dans ce cadre.
Compte tenu de son volume et de sa disposition, la société travaille de façon très ouverte.
Cependant, les experts du bureau d’études sont les seuls à pouvoir accéder aux logiciels les plus
performants de conception et de maquettage. Ces experts ont par ailleurs bénéficié d’une formation
à la manipulation de ces outils. Chacun est conscient de ces responsabilités financières, civiles et
pénales associées à l’usage des informations qu’il manipule : dossier client, données nominatives. . .
Le choix d’une étude de sécurité s’impose donc pour, d’une part, déterminer les
conditions qui permettent l’ouverture du système informatique vers l’extérieur et d’autre part
pour déterminer les mesures de sécurité nécessaires à la protection des projets sensibles.
Exercice 5 : étude du contexte
1. Donner des exemples de sources de menaces à prendre en compte dans l’étude
pour les types de sources de menaces suivants :
1. Source humaine interne, sans intention de nuire, avec de faibles capacités ;
2. Source humaine interne, sans intention de nuire, avec des capacités illimitées ;
3. Source humaine externe, malveillante, avec des capacités importantes ;
4. Source humaine externe, malveillante, avec des capacités illimitée ;
5. Source humaine externe, sans intention de nuire, avec de faibles capacités ;
6. Événement interne.
2. Identifier 3 processus (métiers) essentiels du cabinet. Quelles sont les informations
essentielles concernées ?
Exercice 6 : étude des événements redoutés
Pour les activités de création de plans et de calculs de structures, évaluer les
événements re-doutés selon les 3 critères de sécurité disponibilité, intégrité, confidentialité.
On utilisera les échelles suivantes :
— Disponibilité : plus de 72h entre 24 et 72h entre 4 et 24h moins de 4h.
— Intégrité : détectable maîtrisé intègre.
— Confidentialité : public limité réservé privé.
— Gravité : négligeable limitée importante critique.
Evt. Besoin Source Impacts Gravité
Indisponibilité
Altération
Compromission
23
9 <d i v a l i g n=" c e n t e r " c l a s s=" e r r o r ">
10 <?php i f ( i s s e t ( $ e r r o r ) ) echo $ e r r o r ; ?>
11 </d i v >
12 <d i v c l a s s=" l o g i n −header ␣ margin−bottom −30">
13 <h2>Enter an IP Address </h2>
14 </div >
15 <d i v c l a s s=" input −group ">
16 <span c l a s s=" input −group−addon ">
17 <i c l a s s=" f a ␣ fa −eye "></i >
18 </span>
19 <i n p u t name=" i p " p l a c e h o l d e r=" i p " c l a s s=" form−c o n t r o l " type=" t e x t ">
20 </div >
21 <d i v c l a s s=" row ">
22 <d i v c l a s s=" col −md−6">
23 <i n p u t type=" submit " c l a s s=" btn ␣ btn−primary ␣ p u l l −r i g h t " name="
submit " v a l u e=" Try ! " />
24 </div >
25 </div >
26 <hr>
27 <h4>Nmap, the b e s t network scanner of the world ... </ h4>
28 <p>
29 </form>
30 </div >
31 <!−− End Nmap Box −−>
32 </div >
33
34 <?php
35 i f ( i s s e t ($_POST[ " submit " ] ) )
36 {
37 i f ( empty ($_POST[ ’ i p ’ ] ) )
38 $ e r r o r = " IP ␣ f i e l d ␣ i s ␣ r e q u i r e d . " ;
39 else
40 {
41 $ ip=$_POST[ ’ i p ’ ] ;
42 echo "<pre>" ;
43 system ( "nmap␣−A␣ " . $ ip ) ;
44 echo "</pre>" ;
45 }
46 }
47 require _ o n c e ( ’ f o o t e r . php ’ ) ;
48 ?>
Exercice 32 : Conseils pour du code sûr (Michael Howard & Steve Lipner)
Dans le chapitre 11 Secure Coding Policies de l’ouvrage The Security Development
Lifecycle : SDL : A Process for Developing Demonstrably More Secure Software, Michael
Howard & Steve Lipner, on trouve les bonnes pratiques suivantes pour l’écriture de code
sûr, expliquer et justifier chacune de ces pratiques :
1. use the latest compiler and supporting tool versions ;
2. use defenses added by the compiler ;
3. use source-code analysis tools ;
4. do not use banned functions.
Exercice 33 : Guide de style pour du code robuste (Matt Bishop & Chip Elliott)
L’objectif de l’exercice est d’arriver, en critiquant un code C, à produire des
recommandations issues de Robust Programming by Example, Matt Bishop & Chip Elliott,
sur les bonnes pratiques pour écrire du code robuste.
1. Que font les appels qmanage(&qptr,85,1), qmanage(&qptr,1,85) et qmanage(&qptr,0,85).
Quelle(s) recommandation(s) suggérer concernant les paramètres des fonctions (en C) ?
2. Que se passe-t’il si qptr ou *qptr est 0 dans un appel à qmanage(&qptr,0,42). Que se
passe-t’il lorsque cet appel est passé plusieurs fois ? Quelle(s) recommandation(s)
supplémen-taire(s) suggérer concernant les paramètres ?
Pour une référence en ligne exhaustive et de première qualité sur la programmation
C/C++ sûre, voir http://www.securecoding.cert.org/. Pour un exemple de vulnérabilité
cau-sée par une double libération de la mémoire, voir par exemple
http://www.cert.org/ advisories/CA-2002-07.html
1 typedef struct queue {
2 int que ; / t h e a c t u a l a r r a y o f queue
elements /
3 int head ; / head i n d e x i n que o f t h e queue
/
4 int count ; / number o f e l e m e n t s i n queue /
5 int size ; / max number o f e l e m e n t s i n queue
/
6 } QUEUE ;
7
8 v o i d qmanage ( QUEUE , int , int ); / c r e a t e , d e l e t e queue /
9 v o i d qputon ( QUEUE , int ); / add t o queue /
10 v o i d q t a k e o f f ( QUEUE , int ); / remove from queue /
11
12 v o i d qmanage ( QUEUE qptr , int flag , int size ){
13 if (flag) { / a l l o c a t e a new queue /
14 ( q p t r ) = m a l l o c ( s i z e o f ( QUEUE ));
15 ( q p t r )−>head = ( q p t r )−> c o u n t = 0 ;
16 ( q p t r )−>que = malloc ( size sizeof ( int ));
17 ( q p t r )−> s i z e = s i z e ;
18 } else { / d e l e t e t h e c u r r e n t queue /
19 ( v o i d ) f r e e ( ( q p t r )−>que ) ;
20 ( void ) free ( qptr);
21 }
22 }
3.2 Reconnaissance et réseaux
# strace X:1
open("/tmp/.tX1-lock", O_WRONLY|O_CREAT|O_EXCL, 0644) = 0
write(0, " 20093\n", 11) = 11
chmod("/tmp/.tX1-lock", 0444) =0
close(0) =0
link("/tmp/.tX1-lock", "/tmp/.X1-lock") = 0
unlink("/tmp/.tX1-lock") =0
La fonction open() permet la création du fichier tmp : en cas de réussite, open() assure qu’aucun
fichier du même nom n’était présent sur le disque et renvoie un descripteur de fichier. A l’inverse de
fchmod(), la fonction chmod() opère sur un nom de fichier et non sur un descripteur de fichier.
1. Quel est le problème qui rend l’étape 3 de cet exploit possible ? De quelle forme
d’attaque cryptographique s’agit-il ? Quelle solution proposeriez-vous ?
2. Dans quelle catégorie de la classification SANS classeriez-vous cet exploit ? (à voir
après le cours sur les vulnérabilités).
Annexe A
Appendice
Trace A
SENT (0.5190s) TCP 134.214.143.195:53 > 134.214.142.10:22 S ttl=64 id=45396 iplen=44
SENT (0.5190s) TCP 134.214.143.195:53 > 134.214.142.10:443 S ttl=64 id=23365 iplen=44
SENT (0.5190s) TCP 134.214.143.195:53 > 134.214.142.10:80 S ttl=64 id=53776 iplen=44
SENT (0.5190s) TCP 134.214.143.195:53 > 134.214.142.10:8080 S ttl=64 id=24307 iplen=44
SENT (0.5190s) TCP 134.214.143.195:53 > 134.214.142.10:631 S ttl=64 id=16206 iplen=44
RCVD (0.5190s) TCP 134.214.142.10:22 > 134.214.143.195:53 SA ttl=64 id=0 iplen=44
RCVD (0.5190s) TCP 134.214.142.10:443 > 134.214.143.195:53 SA ttl=64 id=0 iplen=44
RCVD (0.5190s) TCP 134.214.142.10:80 > 134.214.143.195:53 SA ttl=64 id=0 iplen=44
RCVD (0.5190s) TCP 134.214.142.10:8080 > 134.214.143.195:53 SA ttl=64 id=0 iplen=44
RCVD (0.5200s) TCP 134.214.142.10:631 > 134.214.143.195:53 RA ttl=64 id=0 iplen=40
Trace B
SENT (0.2300s) TCP 134.214.235.21:53 > 134.214.142.10:443 S ttl=64 id=49208 iplen=44
SENT (0.2300s) TCP 134.214.235.21:53 > 134.214.142.10:80 S ttl=64 id=32073 iplen=44
SENT (0.2300s) TCP 134.214.235.21:53 > 134.214.142.10:8080 S ttl=64 id=30178 iplen=44
SENT (0.2300s) TCP 134.214.235.21:53 > 134.214.142.10:22 S ttl=64 id=38225 iplen=44
SENT (0.2300s) TCP 134.214.235.21:53 > 134.214.142.10:631 S ttl=64 id=9262 iplen=44
RCVD (0.2320s) TCP 134.214.142.10:443 > 134.214.235.21:53 SA ttl=64 id=0 iplen=44
RCVD (0.2330s) TCP 134.214.142.10:80 > 134.214.235.21:53 SA ttl=64 id=0 iplen=44
RCVD (0.2340s) TCP 134.214.142.10:8080 > 134.214.235.21:53 SA ttl=64 id=0 iplen=44
SENT (1.3310s) TCP 134.214.235.21:53 > 134.214.142.10:631 S ttl=64 id=39325 iplen=44
SENT (1.3310s) TCP 134.214.235.21:53 > 134.214.142.10:22 S ttl=64 id=370 iplen=44
<security-constraint>
<web-resource-collection>
<web-resource-name>restricted methods</web-resource-name>
<url-pattern>/*</url-pattern> <url-pattern>/acme/wholesale/*</url-
pattern> <url-pattern>/acme/retail/*</url-pattern> <http-
method>DELETE</http-method> <http-method>PUT</http-
method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
43
<web-resource-collection>
<web-resource-name>wholesale</web-resource-name>
<url-pattern>/acme/wholesale/*</url-pattern>
<http-method>GET</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>SALESCLERK</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>wholesale</web-resource-name>
<url-pattern>/acme/wholesale/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>CONTRACTOR</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection> <web-resource-
name>retail</web-resource-name>
<url-pattern>/acme/retail/*</url-pattern> <http-
method>GET</http-method> <http-
method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>CONTRACTOR</role-name>
<role-name>HOMEOWNER</role-name>
</auth-constraint>
</security-constraint>
RP1 =
< p,
subject(patient) /\ action(read) /\ resource(patient_record),
patient(id,X) /\ patient_record(id,Y) /\ (X = Y \/ (age(Y) < 18 /\
guardian(X,Y))>
RP2 =
< p,
subject(patient) /\ action(write) /\ resource(patient_survey), patient(id,X) /\
patient_survey(id, X)>
RP3=
< p,
(subject(doctor) \/ subject(nurse)) /\ action(read) /\ resource(patient_record), true>
RM1 =
< p,
subject(doctor) /\ action(write) /\ resource(medical_record),
doctor(id,X) /\ patient(id,Y) /\ medical_record(id, Y) /\ patient_doctor(Y,X)>
RM2 =
< d,
subject(doctor) /\ action(write) /\ resource(medical_record), doctor(id,X),
patient(id,Y), medical_record(id, Y), not patient_doctor(Y,X)>