Computerbeveiliging - Hoe je bad guys buiten de deur houdt

Programeer talen, verschillen kwa security?

05-10-2019, 10:25 door Anoniem, 21 reacties
Is er in verschil kwa risico's waarin je programeerd en de risico's die je daarmee creert?
Ik ben vooral geïnteresseerd in de verschillen tussen, c, java, python en nodejs.
Reacties (21)
05-10-2019, 19:02 door Anoniem
Het grootste verschil tussen java en alle andere is, dat is dat java wordt afgeraden door security specialisten. De meesten zullen ook wel weten waarom.
05-10-2019, 20:09 door Overcome
Door Anoniem: Het grootste verschil tussen java en alle andere is, dat is dat java wordt afgeraden door security specialisten. De meesten zullen ook wel weten waarom.

Dan behoor ik tot de minderheid die dat niet weet. Waarom zou Java afgeraden worden door security specialisten? Wat zijn intrinsieke risico's die Java wel kent en andere programmeertalen niet?

(Offtopic: Als ik een "onveilige programmeertaal" zou moeten kiezen, dan zou ik eerder voor C gaan, doordat je bij C heel goed moet weten wat je doet op gebied van memory handling, garbage collection, pointers, etc. en programmeurs dat niet altijd even goed onder de knie hebben.)
05-10-2019, 20:26 door Anoniem
Door Overcome:
Door Anoniem: Het grootste verschil tussen java en alle andere is, dat is dat java wordt afgeraden door security specialisten. De meesten zullen ook wel weten waarom.

Dan behoor ik tot de minderheid die dat niet weet. Waarom zou Java afgeraden worden door security specialisten? Wat zijn intrinsieke risico's die Java wel kent en andere programmeertalen niet?

(Offtopic: Als ik een "onveilige programmeertaal" zou moeten kiezen, dan zou ik eerder voor C gaan, doordat je bij C heel goed moet weten wat je doet op gebied van memory handling, garbage collection, pointers, etc. en programmeurs dat niet altijd even goed onder de knie hebben.)

Ik denk dat een laagdrempelige programmeertaal het probleem eerder erger maakt. Op het moment dat je minder goede
programmeurs op je klus kunt zetten omdat je taal "lastige" zaken als memory management eenvoudiger maakt (overigens
wel ten koste van resourcegebruik en performance) loop je het risico dat de minder goede programmeurs ook andere
aspecten van programmeren niet goed onder de knie hebben en daar fouten mee maken.

Kijk maar eens naar PHP. Iedereen kan daarmee een website maken met server-side scripting. Memory management
issues zijn er niet in PHP, echter security is een ramp omdat de hobbyisten die PHP programma's maken meestal niet
zo veel snappen van input validatie enzo. Als de programma's van die mensen de hele tijd crashten door foute pointers
dan zouden ze het wellicht opgeven en aan deskundigen overlaten. De security zou dan verbeteren.
05-10-2019, 20:33 door Anoniem
Door Anoniem: Is er in verschil kwa risico's waarin je programeerd en de risico's die je daarmee creert?
Ik ben vooral geïnteresseerd in de verschillen tussen, c, java, python en nodejs.

Een taal kan helpen, maar het is vooral de programmeur die moet weten wat hij doet.

Node.js is geen programmeertaal . Het is een omgeving waarin je javascript kunt draaien . Oftewel , de programmeertaal is javascript.

Met name C is taal waarin de programmeur het meest alert moet zijn - omdat C nogal low-level is, en de programmeur veel functies zelf moet schrijven en de taal (en compiler) weinig vangnetten geven.

Maar ga gewoon informatica studeren - een beetje compleet antwoord is iets van een paar semesters software engineering.
Leer die talen , zoek naar best practices voor het programmeren in die taal, en zoek naar onderwerpen als 'common mistakes <X> programmers make' . En kijk naar (security) bugs die gevonden zijn software geschreven in taal <x> .
Dan ga je wel wat gemeenschappelijke factoren zien van "typisch een C bug" . Of typisch iets van een PHP 'progger' .

Als je van bijna niks weet als programmeur, en dan taal <x> gaat zitten 'proggen' omdat een stel anoniemi op een forum zeggen dat taal <x> veilig is kun ik je wel garanderen dat _jouw_ programma's echt niet heel veilig gaan zijn.
05-10-2019, 21:14 door Anoniem
Door Overcome:
Door Anoniem: Het grootste verschil tussen java en alle andere is, dat is dat java wordt afgeraden door security specialisten. De meesten zullen ook wel weten waarom.
Dan behoor ik tot de minderheid die dat niet weet. Waarom zou Java afgeraden worden door security specialisten? Wat zijn intrinsieke risico's die Java wel kent en andere programmeertalen niet?
Java op zichzelf niet. De browser-plugin, daarentegen, bleek een goudmijn van problemen die maar niet opgelost werden.

Heel dom van oracle om er zo met de pet naar te gooien.

(Offtopic: Als ik een "onveilige programmeertaal" zou moeten kiezen, dan zou ik eerder voor C gaan, doordat je bij C heel goed moet weten wat je doet op gebied van memory handling, garbage collection, pointers, etc. en programmeurs dat niet altijd even goed onder de knie hebben.)
Het probleem is een beetje dat als je de programmeertaal "versimpelt" cq. dichttimmert dat je programmeurs dan ook navenant simpeler blijken te worden. Want de experts die overal rekening mee houden zijn te duur dus huur je minder dure en minder gehaaide mensen in. Dus dan vinden ze wel weer manieren om problemen te veroorzaken doordat ze bijvoorbeeld ten onrechte aannemen dat de programmeertaal dit ook wel even voor ze zal regelen, of dat ze er gewoon even niet aan gedacht hebben, en zo verder.

C is bij uitstek een programmeertaal voor mensen die weten wat ze doen, en dat is een ander slag mensen dan bijvoorbeeld de grote hordes java-, dotnet-, javascript-, PHP- en andere programmeurs die veel van het "dagelijkse brood"-programmeren voor hun rekening nemen. Wat niet wil zeggen dat iedereen die in een zekere programmeertaal schrijft ook voldoende aanleg, kennis, vaardigheid, en inzicht heeft om dat veilig te doen. Bijna ongeacht de programmeertaal, zie boven.

Vergelijk het verhaal "Unix - the Hole Hawg of operating systems".

Ik zou dus niet zozeer de programmeertaal aanwijzen, alswel de combinatie programmeertaal-programmeur-doel. Het heeft zeker zin goed na te denken over wat je op te lossen probleem nodig heeft, maar dus ook wie daar een goede vakman (m/v) bij zou zijn en wat voor gereedschappen hij ervoor zal willen gebruiken.
05-10-2019, 21:35 door Erik van Straten - Bijgewerkt: 05-10-2019, 21:47
Door Overcome: ... doordat je bij C heel goed moet weten wat je doet op gebied van memory handling, garbage collection, ...
Binnen de programmeertalen C (en C++) is er geen sprake van "Garbage Collections" [1][2]. Wel zijn er, in elk geval voor C++, libraries die "objecten met variabele plaatsen in het geheugen" ondersteunen. In tijd-kritische C code kun je garbage collections missen als kiespijn, want je weet van tevoren nooit wanneer ze optreden en hoe lang ze duren.

Het voordeel, qua snelheid, van C is dat er vanuit de programmeertaal bijna nergens op gecheckt wordt - en dat is ook meteen het nadeel. Als je een array hebt van bijv. 3 elementen, bijv. a[0], a[1] en a[2], voorkomen C en C++ niet dat je de inhoud van a[4] of a[-1] probeert te lezen of zelfs te overschrijven (in dat laatste geval overschrijf je vaak geheugen dat door andere variabelen in het programma wordt gebruikt). Programma's geschreven in talen als Java en Python klappen er dan meteen uit met een foutmelding, waardoor o.a. tijdens testen dit soort fouten eerder aan het licht komen.

Programma's geschreven in C en C++ kunnen de gebruiker soms extreem lang laten aanmodderen met "gecorrumpeerd" geheugen, waardoor de oorzaken van fouten bijzonder lastig te traceren kunnen zijn. Als C/C++ programmeur moet je je er vooral van bewust zijn dat je weinig hulp vanuit de programmeertaal en van de eindgebruiker kunt verwachten als jouw programma niet blijkt te werken zoals bedoeld.

Voorbeeld: [3] (onvoldoende check op user input kan leiden tot een buffer overflow met VM guest-to-host escape als gevolg).

Daarnaast is het niet moeilijk (en in sommige kringen gebruikelijk) om in C/C++ nauwelijks leesbare sourcecode te produceren, wat de onderhoudbaarheid niet ten goede komt.

[1] https://nl.wikipedia.org/wiki/Garbage_collection
[2] https://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
[3] https://seclists.org/oss-sec/2019/q3/233
06-10-2019, 00:09 door Anoniem
Door Anoniem: Is er in verschil kwa risico's waarin je programeerd en de risico's die je daarmee creert?
Ik ben vooral geïnteresseerd in de verschillen tussen, c, java, python en nodejs.

Google even Security C vs java vs Python

Je zult veel paginas vinden met zeer uitgebreidde antwoorden.

Bedankt
06-10-2019, 02:40 door Krakatau - Bijgewerkt: 06-10-2019, 02:40
Door Anoniem: Het grootste verschil tussen java en alle andere is, dat is dat java wordt afgeraden door security specialisten. De meesten zullen ook wel weten waarom.

Weer iemand die het onderscheid tussen Java de uiterst veilige programmeertaal en de Java-browserplug-in niet weet te maken. N.B.: die laatste wordt niet eens meer ondersteund.
06-10-2019, 07:10 door Anoniem
Ik ben vooral geïnteresseerd in de verschillen tussen, c, java, python en nodejs.
Een van de verschillen is denk ik toch dat c moeilijker te leren is dan python.
06-10-2019, 12:18 door Anoniem
lol lekker C met node.js vergelijken... goed bezig....
06-10-2019, 22:58 door Anoniem
Wat is nodejs, dat iedereen daarover praat? Klinkt als een gehypte Javascript (rommel) library.
07-10-2019, 09:38 door Anoniem
Door Krakatau:
Door Anoniem: Het grootste verschil tussen java en alle andere is, dat is dat java wordt afgeraden door security specialisten. De meesten zullen ook wel weten waarom.

Weer iemand die het onderscheid tussen Java de uiterst veilige programmeertaal en de Java-browserplug-in niet weet te maken. N.B.: die laatste wordt niet eens meer ondersteund.

Inderdaad dat komt vaak voor. Maar dan nog constateer ik dat de combinatie Java+typische Java programmeur
meestal een behoorlijke performance hit oplevert tov de combinatie C+kundige C programmeur.
Met security heeft dat niet direct iets te maken, hoewel het soms het aspect van overbelasting van het systeem als
gevolg van niet-lukkende inbraak- of DoS pogingen kan raken. Een Java site overbelast je wat gemakkelijker.
09-10-2019, 11:24 door Anoniem
C en Java zijn programmeertalen

Python is scripting ( wordt runtime geparsed ipv vooraf gecompileerd )
NodeJS is een parser voor JavaScript scripts ( dus weer geen programmeertaal )

De security zit voor 90% bij de programmeur
09-10-2019, 11:41 door Anoniem
Dit klinkt als een schoolopdracht. @ts, wat heb je zelf al uitgezocht?
09-10-2019, 11:46 door MathFox
Door Anoniem:
De security zit voor 90% bij de programmeur
En bij een goed ontwerp, goede ontwikkelprocedures, goede documentatie en goed systeembeheer (door de eindgebruiker).

De programmeertaal heeft effect op de soorten van fouten die kunnen optreden; buffer overflows zijn typisch voor C en C++ en komen in java en python (vrijwel) niet voor. Aan de andere kant, logische fouten (accepteren van lege wachtwoorden als correct) kun je in iedere taal maken. Het "voordeel" van javascript dat je in een browser laat uitvoeren is dat de securitybugs voor de eindgebruiker zijn. :-/
09-10-2019, 15:30 door Anoniem
Door MathFox:
Door Anoniem:
De security zit voor 90% bij de programmeur
En bij een goed ontwerp, goede ontwikkelprocedures, goede documentatie en goed systeembeheer (door de eindgebruiker).

De programmeertaal heeft effect op de soorten van fouten die kunnen optreden; buffer overflows zijn typisch voor C en C++ en komen in java en python (vrijwel) niet voor. Aan de andere kant, logische fouten (accepteren van lege wachtwoorden als correct) kun je in iedere taal maken. Het "voordeel" van javascript dat je in een browser laat uitvoeren is dat de securitybugs voor de eindgebruiker zijn. :-/

Juist: en dat ontwerp, procedures etc staat en valt bij de programmeur ;-)

Javascript en Python zijn geen programmeertalen maar script talen.
En javascript draait niet alleen aan de client kant in een browser, NodeJS is toch echt een server side javascript parser.

NodeJS werkt ook prima als iemand NoScript aan heeft in zijn browser :-p
10-10-2019, 11:19 door Anoniem
Als je netjes je zooi in de code opruimt is garbage collection niet nodig.
10-10-2019, 12:44 door Anoniem
Door Anoniem: Javascript en Python zijn geen programmeertalen maar script talen.
Ik vind het een beetje vreemd om talen waarin je serieuze applicaties kan bouwen scripttalen te blijven noemen. Wat is jouw definitie van een scripttaal? Een taal waarin je programma's zonder afzonderlijke compilatieslag kan opstarten? Dat is een bijna essentiële eigenschap voor scripts, maar je moet het niet omdraaien en het als definitie voor een scripttaal gebruiken.

Een script is volgens mij van oorsprong het geautomatiseerd uitvoeren van een reeks handelingen die ook een voor een door een mens gedaan kunnen worden. Het wordt ook gebruikt voor een programma dat in een applicatie ingebouwde taal geschreven is waarmee die applicatie aangestuurd kan worden, een concept dat vermoed ik begonnen is met het opnemen en weer afspelen van een reeks menselijke handelingen in zo'n applicatie.

Maar de talen ervoor kunnen meestal veel meer dan die simpele basis. Zelfs shell scripts kunnen zoveel meer zelfstandige logica bevatten dat het twijfelachtig is om dat nog een scripttaal te noemen. In Python en JavaScript worden indrukwekkende applicaties gebouwd, voor beide zijn bekende high volume websites te noemen die erop draaien, en Python is ook volledig geschikt om uitgebreide desktopapplicaties in te bouwen met keuze uit heel scala aan GUI-frameworks, inclusief frameworks die primair op smartphone- en tablet-apps gericht zijn. Hoezo "script"-taal?

Ik denk dat als je je even kwaad maakt je zo een programma hebt geschreven waarmee je van een C-source de eerste regel kan wegstrippen, de rest kan compileren naar een executable die op een tijdelijke locatie staat, de executable in een adem door kan uitvoeren en hem daarna weggooien. Die eerste regel die je uit de source stript kan dan als shebang gebruikt worden, de regel waaraan op Unix/Linux staat welke interpreter voor een script gebruikt moet worden. En opeens is C een scripttaal geworden, en als je vindt dat een scripttaal geen programmeertaal is dan is C opeens geen programmeertaal meer.

Zie je hoe betekenisloos het onderscheid eigenlijk is?
10-10-2019, 18:26 door Anoniem
Door Anoniem: Als je netjes je zooi in de code opruimt is garbage collection niet nodig.

Tegenwoordig wordt er geprogrammeerd door robotten. Die hebben geen menselijke intelligentie die naar code kijkt en deze van voor naar achter en achter naar voren snapt dus komt er altijd rommel. Dat is inherent aan zo'n programmeer systeem.
10-10-2019, 21:14 door [Account Verwijderd]
Door Anoniem:
Door Anoniem: Als je netjes je zooi in de code opruimt is garbage collection niet nodig.

Tegenwoordig wordt er geprogrammeerd door robotten. Die hebben geen menselijke intelligentie die naar code kijkt en deze van voor naar achter en achter naar voren snapt dus komt er altijd rommel. Dat is inherent aan zo'n programmeer systeem.

Echt waar? En al die vacatures voor (menselijke) softwareontwikkelaars dan? Een afleidingsmanoeuvre?
10-10-2019, 22:36 door Anoniem
Door Anoniem: Is er in verschil kwa risico's waarin je programeerd en de risico's die je daarmee creert?
Ik ben vooral geïnteresseerd in de verschillen tussen, c, java, python en nodejs.
Java runtimes (en die van anderen taalen zoals python, perrel etc.) zijn allemaal in C geschreefd.
Sorry slecht Nederland sis besmetlijk.
Reageren

Deze posting is gelocked. Reageren is niet meer mogelijk.