[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[RFR] wml://security/audit/examples/*



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Enigmail
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFA0Gc35UTeB5t8Mo0RAqkMAJ9DvqU4sLUgAnSR1r6dZ+ajy3uXLQCcCzgq
BdXPuyB3vhQCBxve9v5+oCA=
=dVCO
-----END PGP SIGNATURE-----
#use wml::debian::template title="Geautomatiseerd Audit Voorbeeld: RATS"
#use wml::debian::recent_list
#use wml::debian::translation-check translation="1.3"

# Last Translation Update by $Author: luk $
# Last Translation Update at $Date: 2004/06/16 15:34:02 $

<p><a href="http://packages.debian.org/rats";>RATS</a> is een algemene scanner
voor detectie van potentiële veiligheidsproblemen in een aantal 
programmeertalen.</p>

<h2>RATS uitvoeren</h2>
<p>RATS uitvoeren is gewoon een kwestie van het commando op te geven met een te
behandelen map. Elk van de herkende broncodebestanden die het vindt, zal worden
behandeld. RATS begrijpt verschillende programmeertalen: C, Perl, PHP en Python
en zal elk van hen behandelen als geldige broncode om te onderzoeken.</p>
<p>Er zijn verschillende opties die kunnen meegegeven worden naast een te 
scannen map, deze worden beschreven in de manpagina.</p>
<p>De nuttigste opties zijn deze die de uitvoer aangaan, zoals:</p>
<ul>
<li>--warning &lt;niveau&gt; (Zet het niveau van de lekken waarover moet gerapporteerd worden)
<ul>
<li>1 geeft enkel standaard en hoge belangrijkheid.</li>
<li>2 geeft medium belangrijkheid (standaard niveau).</li>
<li>3 geeft lage belangrijkheid.</li>
</ul></li>
<li>--xml  (uitvoer in XML)</li>
<li>--html (uitvoer in HTML)</li>
</ul>
<p>Er van uitgaande dat het <a href="test.c.html">testbestand</a> in de 
huidige map is, zonder andere broncodebestanden, kunnen we de scanner oproepen
met het volgende commando:</p>
<pre>
rats --warning 1 --html . &gt;output.html
</pre>
<p>Dit zal een HTML-bestand aanmaken die de resultaten van de scan bevat, het
kan ingeladen worden door een browser.</p>

<h2>De Resultaten</h2>
<p>RATS uitvoeren tegen onze <a href="test.c.html">voorbeeldcode</a> geeft 
volgende uitvoer:</p>
<hr />
<blockquote>
  <b>Severity: High</b><br />
  Issue: fixed size global buffer<br/>
    Extra care should be taken to ensure that character arrays that are
    allocated on the stack are used safely.  They are prime targets for
    buffer overflow attacks.
  <br/>
<ul>
File: <b>./test.c</b><br/>Lines: 
10 11 12   </ul>
  <b>Severity: High</b><br/>
  Issue: strcpy<br/>
    Check to be sure that argument 2 passed to this function call will not
    copy more data than can be handled, resulting in a buffer overflow.
  <br/>
<ul>
File: <b>./test.c</b><br/>Lines: 
18   </ul>
  <b>Severity: High</b><br/>
  Issue: getenv<br/>
    Environment variables are highly untrustable input. They may be of any length, and contain any data. Do not make any assumptions regarding content or length. If at all possible avoid using them, and if it is necessary, sanitize them and truncate them to a reasonable length.
  <br/>
<ul>
File: <b>./test.c</b><br/>Lines: 
22 24   </ul>
  <b>Severity: High</b><br/>
  Issue: sprintf<br/>
    Check to be sure that the format string passed as argument 2 to this
    function call does not come from an untrusted source that could have added
    formatting characters that the code is not prepared to handle.
    Additionally, the format string could contain `%s' without precision that
    could result in a buffer overflow.
  <br/>
<ul>
File: <b>./test.c</b><br/>Lines: 
24   </ul>
  <b>Severity: High</b><br/>
  Issue: popen<br/>
    Argument 1 to this function call should be checked to ensure that it does
    not come from an untrusted source without first verifying that it contains
    nothing dangerous.
  <br/>
<ul>
File: <b>./test.c</b><br/>Lines: 
33   </ul>
  <b>Severity: High</b><br/>
  Issue: printf<br/>
    Check to be sure that the non-constant format string passed as argument 1 
    to this function call does not come from an untrusted source that could
    have added formatting characters that the code is not prepared to handle.
  <br/>
<ul>
File: <b>./test.c</b><br/>Lines: 
42   </ul>
Total lines analyzed: <b>49</b><br>
Total time <b>0.001723</b> seconds<br>
<b>28438</b> lines per second<br>
</blockquote>
<hr />
<p>Deze uitvoer is nogal lijvig, ondanks dat de code zelf vrij kort is - dit 
toont één van de nadelen van geautomatiseerd scannen: het grote volume aan 
uitvoer.</p>

<h2>De uitvoer begrijpen</h2>
<p>De geproduceerde uitvoer is een beschrijving van de functies die werden
tegengekomen, de regelnummer waarop het lek werd gedetecteerd en een 
beschrijving van het probleem. (Omdat we het "--warning"-niveau gebruikten om
de uitvoer te beperken tot de "hoge" niveau functies, hebben we de uitvoer wat
gereduceerd).</p>
<p>Elk van de gevonden problemen moet handmatig worden onderzocht om te zien of
er iets echt mis mee is, of om te zien dat het een valse positieve is (v.b. een
functie die kan misbruikt worden die correct wordt gebruikt).</p>
<p>In dit geval kunnen we zien dat alle lekken in onze code zijn opgemerkt,
maar het is niet helemaal duidelijk zonder door de code te lopen met een editor
en de regels te matchen.</p>
<p>Een sterke zwakte is dat de uitvoer niet toont over welke regels 
gerapporteerd wordt - iets dat <a href="flawfinder">flawfinder</a> wel toestaat.</p>
<hr />
<p><a href="..">Terug naar het auditproject</a> | <a href="index">Terug naar de auditvoorbeeldenpagina</a></p>
#use wml::debian::template title="Geautomatiseerd auditvoorbeeld: flawfinder"
#use wml::debian::recent_list
#use wml::debian::translation-check translation="1.5"

# Last Translation Update by $Author: luk $
# Last Translation Update at $Date: 2004/06/16 15:34:02 $

<p><a href="http://packages.debian.org/flawfinder";>flawfinder</a> is een 
algemene scanner voor het vinden en rapporteren van potentiële lekken in C- en
C++-broncode.</p>


<h2>flawfinder uitvoeren</h2>
<p>flawfinder uitvoeren is gewoon een kwestie van het commando op te geven met
de map- of bestandsnamen om te onderzoeken. Als een mapnaam wordt opgegeven,
dan zal het alle geldige broncodebestanden die het vindt in de map behandelen.</p>
<p>Naast een lijst van bestanden of mappen, kunnen er ook verschillende opties
worden meegegeven om het gedrag van de hulpmiddelen te sturen.</p>
<p>Elke optie wordt uitgelegd in de manpagina, maar de volgende opties zijn
bijzonder nuttig en zullen worden gebruikt in ons voorbeeld:</p>
<ul>
<li>--minlevel=X
<ul>
<li>Zet minimum risiconiveau op X voor inclusie in de uitvoer. Bereiken van 1-5,
met 1 "laag risico" en 5 "hoog risico".</li>
</ul></li>
<li>--html
<ul>
<li>Formatteer de uitvoer als HTML in plaats van gewone tekst</li>
</ul></li>
<li>--context
<ul>
<li>Toon context, v.b., de regel met het potentiële lek.</li>
</ul></li>
</ul>

<p>Om als uitvoer een HTML-bestand te krijgen die de resultaten van ons 
programma bevat en enkel rekening houdend met de "hoge risico" functies zouden
we het volgende uitvoeren:</p>
<pre>
flawfinder --html --context --minlevel=4 test.c &gt; output.html
</pre>

<h2>De Resultaten</h2>
<p>flawfinder uitvoeren tegen onze <a href="test.c.html">voorbeeldcode</a> 
geeft volgende uitvoer:</p>

<hr />
<blockquote>
<p>
Examining test.c <br>
<ul>
<li>test.c:18: <b>  [4] </b> (buffer) <i> strcpy:
  Does not check for buffer overflows when copying to destination.
  Consider using strncpy or strlcpy (warning, strncpy is easily misused).  </i>
<pre>
      strcpy( dir, argv[ 1 ] );
</pre>
<li>test.c:24: <b>  [4] </b> (buffer) <i> sprintf:
  Does not check for buffer overflows. Use snprintf or vsnprintf.  </i>

<pre>
	sprintf( dir, "%s", getenv( "HOME" ) );
</pre>
<li>test.c:33: <b>  [4] </b> (shell) <i> popen:
  This causes a new program to execute and is difficult to use safely.
  try using a library call that implements the same functionality if
  available.  </i>
<pre>
    fp = popen( cmd, "r" );
</pre>
<li>test.c:42: <b>  [4] </b> (format) <i> printf:
  If format strings can be influenced by an attacker, they can be
  exploited. Use a constant for the format specification.  </i>

<pre>
      printf( buff );
</pre>
</ul>
<p>
Number of hits = 4
<br>
Number of Lines Analyzed = 48 in 0.53 seconds (1392 lines/second)
<br>
</blockquote>
<hr />

<h2>De uitvoer begrijpen</h2>
<p>Zoals de uitvoer van <a href="RATS">RATS</a> is dit rapport zeer gemakkelijk
te lezen. Het toont duidelijk de functies die gedetecteerd zijn als potentieel
gevaarlijk met een beschrijving van het probleem.</p>
<p>Contextinformatie laten zien is ook zeer nuttig omdat het onmiddelijk 
de aandacht kan trekken op de belangrijke gebieden of andere rapporten afwijzen
omdat ze ongeldig zijn.</p>
<p>De analyse van <a href="test.c">onze voorbeeldcode</a> is tamelijk 
intelligent, in de zin dat het niet waarschuwt bij <i>elk</i> gebruik van de
lastige <tt>strcpy</tt>-functie - enkel bij diegene die het gevaarlijk acht.</p>
<p>Op deze manier is het geslaagd om alle mogelijke lekken te tonen zonder 
valse positieven.</p>
<hr />
<p><a href="..">Terug naar het auditproject</a> | <a href="index">Terug naar de auditvoorbeeldenpagina</a></p>
#use wml::debian::template title="Geautomatiseerd Audit Voorbeeld: pscan"
#use wml::debian::recent_list
#use wml::debian::translation-check translation="1.3"

# Last Translation Update by $Author: luk $
# Last Translation Update at $Date: 2004/06/16 15:34:02 $

<p><a href="http://packagse.debian.org/pscan";>pscan</a> is een pakket dat is
ontworpen om C- en C++-broncodebestanden aan een formaatstringaudit te 
onderwerpen.</p>
<p>Het is geen algemeen audithulpmiddel.</p>

<h2>pscan uitvoeren</h2>
<p>pscan uitvoeren is gewoon een kwestie van het op te geven met de 
bestandsnaam of -namen om te controleren. Bijvoorbeeld:</p>
<pre>
pscan <a href="test.c.html">test.c</a>
</pre>
<p>De uitvoer zal rechtstreeks naar de console worden uitgeschreven:</p>
<hr />
<pre>
test.c:42 SECURITY: printf call should have "%s" as argument 0
</pre>
<hr />

<h2>De Uitvoer</h2>
<p>De uitvoer is in dit geval gemakkelijk te begrijpen. Het heeft het feit dat
de <tt>printf</tt>-aanroep haar argumenten niet op de juiste manier "quote",
correct geïdentificeerd.</p>
<p>De uitvoer toont ons ook wat we moeten doen om het op te lossen, wijzig de
code:
<pre>
printf( buff );
</pre>
<p>naar:</p>
<pre>
printf( "%s", buff );
</pre>
<p>Dit niet doen, kan een aanvaller die de uitvoer van <tt>ls</tt> kan 
controleren, toelaten om het programma aan te vallen, door een bestand genaamd
"%s", of gelijkaardig aan te maken.</p>
<p>Formaatstring-aanvallen worden bediscussieerd in deze 
<a href="http://www.securityfocus.com/guest/3342";>Security Focus introduction</a>.</p>
<p>De <a href="http://www.dwheeler.com/secure-programs/";>Secure Programming for Linux and Unix HOWTO</a> legt u uit hoe u zich kunt beschermen tegen deze 
aanvallen in veel gebruikte variadische functies zoals:</p>
<ul>
<li>printf</li>
<li>fprintf</li>
<li>syslog</li>
</ul>
<hr />
<p><a href="..">Terug naar het auditproject</a> | <a href="index">Terug naar de auditvoorbeeldenpagina</a></p>

Reply to: