student numbers
[ssproject1617.git] / report / v7_cryptography.tex
1 % usage of crypt()
2 \begin{enumerate}[label={V7.\arabic*}]
3
4 \addtocounter{enumi}{1}
5 \item
6 \pass{}
7 Verify that all cryptographic modules fail securely, and errors are handled
8 in a way that does not enable oracle padding.
9 \begin{result}
10 The only cryptographic operation is the hashing of the password, which can
11 not be vulnerable to a padding attack as it does not use a block cipher.
12 \end{result}
13
14
15 \addtocounter{enumi}{3}
16 \item
17 \fail{}
18 Verify that all random numbers, random file names, random \GUID{}s, and random
19 strings are generated using the cryptographic module’s approved random
20 number generator when these random values are intended to be not guessable
21 by an attacker.
22 \begin{result}
23 The application uses \PHP{}'s \code{mt\_rand()} function to generate the
24 initial password. This function uses a Mersenne Twister and does not
25 generate cryptographically secure values.
26 \end{result}
27
28
29 \item
30 \fail{}
31 Verify that cryptographic algorithms used by the application have been
32 validated against FIPS 140{-}2 or an equivalent standard.
33 \begin{result}
34 \begin{itemize}[leftmargin=*]
35 \item
36 The application uses MD5 for password hashing, which is insecure by current
37 standards of FIPS 140{-}2.
38 \item
39 The application uses \code{crypt()} for passwords, and does not supply a
40 salt in these cases. This means \PHP{} will use DES{-}based algorithm,
41 which is insecure by the current standard of FIPS 140{-}2.
42 \end{itemize}
43 \end{result}
44
45 \notapplicable{%
46 \item
47 Verify that cryptographic modules operate in their approved mode according
48 to their published security policies.
49 }
50
51 \item
52 \fail{}
53 Verify that there is an explicit policy for how cryptographic keys are
54 managed (e.g., generated, distributed, revoked, and expired). Verify that
55 this key lifecycle is properly enforced.
56 \begin{result}
57 There is no such policy. The unique application key that is used to sign
58 passwords in generated by \code{mt\_rand()}, which is insuitable for
59 generating cryptographically secure values. The lifecycle of this key is
60 unlimited.
61 \end{result}
62
63
64 \addtocounter{enumi}{1}
65 \notapplicable{%
66 \item
67 Verify that all consumers of cryptographic services do not have direct
68 access to key material. Isolate cryptographic processes, including master
69 secrets and consider the use of a virtualized or physical hardware key vault
70 (HSM).
71 }
72
73 \item
74 \fail{}
75 \textit{Personally Identifiable Information} should be stored encrypted at
76 rest and ensure that communication goes via protected channels.
77 \begin{result}
78 The information stored consists of an email address, the user's real
79 name and a biography. All of these are stored in the database unencrypted.
80 \end{result}
81
82 \item
83 \fail{}
84 Verify that sensitive passwords or key material maintained in memory is
85 overwritten with zeros as soon as it no longer required, to mitigate memory
86 dumping attacks.
87 \begin{result}
88 This does not happen anywhere, any passwords submitted to the application
89 will stay in memory for an undefined amount of time.
90 \end{result}
91
92 \item
93 \pass{}
94 Verify that all keys and passwords are replaceable, and are generated or
95 replaced at installation time.
96 \begin{result}
97 All users can replace their password in their profile. Note that there is
98 no `confirmation field' which makes it easy to change an password to an
99 unintended value.
100 \end{result}
101
102 \notapplicable{%
103 \item
104 Verify that random numbers are created with proper entropy even when the
105 application is under heavy load, or that the application degrades gracefully
106 in such circumstance.
107 }
108
109 \end{enumerate}