image

Open source Java software veiliger maar buggy

dinsdag 6 maart 2007, 12:36 door Redactie, 10 reacties

In Java geschreven open source programma's zijn veiliger dan soortgelijke projecten die in andere programmeertalen ontwikkeld zijn, maar zijn nog steeds erg buggy, zo blijkt uit onderzoek. Het Java Open Review project bekeek de code van verschillende frameworks, zoals Hibernate, Spring, Struts en Tomcat.

Gemiddeld heeft Java software met zo'n 0,07 beveiligingslekken en bugs per duizend regels code te maken, wat veel lager is dan met C en C++ gemaakte software. Dit is deels te danken aan de ingebouwde beperkingen op het gebied van geheugenmanagement. De onderzoekers ontdekten dat Hibernate 0,007, Spring 0,037, Struts 0,127 en Tomcat 0.111 fouten per duizend regels heeft. De meeste fouten werden gevonden in Net Trust, dat met 12,195 fouten per duizend regels ver boven de rest uitsteekt. Het voornaamste beveiligingsprobleem in de open source Java software is cross-site scripting, gevolgd door SQL injection.

"We wilden aantonen dat Java dan betrouwbaarder is, en de Java infrastructuur redelijk veilig, maar dat dit niet gezegd kan worden van de code die hier omheen wordt geschreven" zegt Barmak Meftah van Fortify Software.

Reacties (10)
06-03-2007, 13:40 door Anoniem
Sja... hetzelfde probleem als met PHP en in feite elke taal.
06-03-2007, 14:08 door pikah
Niet helemaal, het probleem met programmeertalen als C en
C++ is dat je rechtstreeks het geheugen aan kan spreken. Dit
is ideaal als je hier gebruik van wilt maken.

JAVA schermt dit volledig af en het is dus niet mogelijk
zelf rechtstreeks in het geheugen te schrijven. Dit zal
allemaal worden gedaan door de Virtual Machine.

Het is dus een voordeel, een groot nadeel vind ik dat het
gewoon een heel stuk trager wordt.

Ligt dus aan de programmeur wat hij wil en tevens ook aan de
programmeur hoeveel fouten er in de code zitten.
06-03-2007, 14:50 door Anoniem
Ook de ontwikkeltijd van java programmatuur ligt 3 keer
hoger (trager) dan bijvoorbeeld php programmatuur.
06-03-2007, 17:52 door Anoniem
Ik vind C/C++ beter omdat je dat volledige controle over je
code hebt (over het geheugen dus). Hierdoor kan je precies
kiezen wat je in het geheugen wil en wat niet, etc. Hierdoor
denk ik dat C/C++ programma's kwalitatief beter zijn.
06-03-2007, 21:39 door Anoniem
Door Anoniem
Ook de ontwikkeltijd van java programmatuur ligt 3 keer
hoger (trager) dan bijvoorbeeld php programmatuur.

waar je dit op baseert??? geen enkel flauw idee.. ik denk
dat ik in java sneller iets heb geschreven dan in php...
puur alleen omdat ik niet met php (en andere scripting
talen, of oud scripting talen) iets wil of kan doen...

Maar buggy en non-secure code ligt niet binnen een taal..
maar nog altijd bij de programmeur..

het klopt dat java een vm voor het geheugen heeft zitten..
maakt het ietsjes veiliger.. maar ietsjes is nooit helemaal!
07-03-2007, 02:52 door Anoniem
Ik heb hun RATS tool bekeken.

Het begint niet goed want "rats --?" crasht.
rats -h blijkt het helpscherm te tonen.

Output van een test. Ze geven wel een paar nuttige opmerkingen, maar er
is geen enkele fout gevonden, er zijn alleen "high" meldingen. Daarom
heet het waarschijnlijk ook "Rough Auditing Tool for Security" (RATS).

Nog een foutje: InitialCriticalSectionAndSpinCount bestaat niet volgens
Google. InitializeCriticalSectionAndSpinCount wel.

Entries in perl database: 33
Entries in python database: 62
Entries in c database: 334
Entries in php database: 55
Analyzing source.c
source.c:886: High: fixed size local buffer

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.

source.c:1428: High: strncat
Consider using strlcat() instead.

source.c:1428: High: strncat
Check to be sure that argument 1 passed to this function call will not copy
more data than can be handled, resulting in a buffer overflow.

source.c:1434: High: strcpy
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.

source.c:2830: High: EnterCriticalSection
This function can throw exceptions in low memory conditions. Use
InitialCriticalSectionAndSpinCount instead.

source.c:48839: High: strcat
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.

source.c:48988: High: sprintf
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.

Total lines analyzed: 49090
Total time 0.312000 seconds
157339 lines per second
(herhalingen weggeknipt)
07-03-2007, 06:38 door Anoniem
Heb zelf de beveiliging van Java lange tijd niet te serieus
genomen,
maar met JOE-E kan Java een echte object capability taal zijn.
Met OC kun je 'echt' veilige code ontwerpen en programeren.
07-03-2007, 07:44 door Anoniem

Ook de ontwikkeltijd van java programmatuur ligt 3 keer
hoger (trager) dan bijvoorbeeld php programmatuur.

Als je tijdens het programmeren ontwikkelt. Een beetje
programmeur weet dat het intypen van de code een miniem deel
is van het ontwikkelproces. Een beetje verbositeit in een
programmeertaal is een kleine prijs om te betalen als je er
dingen als type-safety voor terug krijgt. Vergeleken met C++
is java veiliger vanwege het geheugen management, vergeleken
met PHP is het veiliger vanwege type-safety, een degelijk
OO-model en legio andere constructies.

De traagheid is een nadeel, maar die valt heel goed in te
perken als je weet wat je doet.
07-03-2007, 09:24 door koekblik
Door Anoniem
Ook de ontwikkeltijd van java programmatuur ligt 3 keer
hoger (trager) dan bijvoorbeeld php programmatuur.

En dat ligt allemaal weer stukken hoger dan in Python
ontwikkelde programma's.
09-03-2007, 18:54 door Anoniem
Door Anoniem
Ik vind C/C++ beter omdat je dat volledige controle over je
code hebt (over het geheugen dus). Hierdoor kan je precies
kiezen wat je in het geheugen wil en wat niet, etc. Hierdoor
denk ik dat C/C++ programma's kwalitatief beter zijn.

DUS terug naar assembler dan? Of lang leve de schakelaars?
De C-familie is dus echt totaal niet te vergelijken met
Java, afgezien van C# dan misschien. Het verschil in
mogelijheden is 12 op een schaal van 1 tot 10.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.