De Nederlandse Dienst Justitiële Inrichtingen heeft drieduizend gesprekken van advocaten opgenomen door een softwarefout. Dat las ik bij Tweakers. De bron is een brief van de staatssecretaris waarin hij meldt van een incident: gesprekken van advocaten wiens nummer meerdere malen in de lijst met niet-opnemen-nummers stonden, werden wél opgenomen. Dit kwam uit nadat een advocaat het ontdekte (maar hoe dan?) en erover klaagde. De fout is nu opgelost.
Gezien het “van advocaten die meerdere malen voorkomen” zie ik het nog wel als reëel dat het echt een programmeerfout was. Een simpele verklaring is dat de te matchen nummers normaal als tekststring binnenkomen en nu als lijst met de meerdere nummers. Vergelijken van een string met een array zal nooit een match opleveren, dus dan komt dit gesprek door de check heen en wordt het alsnog opgenomen.
De grotere vraag is waarom de DJI dit nooit merkte bij het terugluisteren van de taps. Mogelijk doen ze dat alleen steekproefsgewijs, en het aantal advocaten met twee geregistreerde nummers zal klein zijn dus in theorie is het altijd toevallig goed gegaan. Maar het is natuurlijk ook goed denkbaar dat er DJI-mensen waren die wél meeluisterden. Ik zou het dan wel héél riskant vinden om er wat mee te doen, want als je wordt betrapt heb je geen enkel excuus.
Idem als je het doorbrieft aan een agent die bezig is met een onderzoek. Die kan er niets mee in het dossier, want leg eens uit waar dat bewijs vandaan komt? Natuurlijk is softe informatie handig om te hebben maar dit kan je hele onderzoek besmetten omdat de overtreding dermate ernstig is. Dus ja, het is denkbaar maar zelfs agenten die de wet willen breken, zullen denk ik even twee keer nadenken bij deze bron van informatie.
Arnoud
En wat zijn de gevolgen als het gebruikt zou worden en daarna bewijs wordt gevonden die in een gesprek genoemd is? Als de opname is afgeluisterd is de schijn al tegen, helemaal als de betrokken agenten er mogelijk vanaf weten.
Of het is geprogrammeerd als ‘… == 1’ (of ‘… === 1’) i.p.v. ‘… > 0’).
Een array is wel op te splitsen… Maar denk ook aan verschillen in de formattering… 020-1234567 is wat anders dan 0031-20-1234567, en dat is weer wat anders dan +31-(0)20-1234567… terwijl het wel degelijk om hetzelfde nummer gaat… Goeie kans dat er geen goed masker is bij de invoer en ze de dan fout in zijn gegaan bij het te letterlijk matchen…
Het checken van telefoonnummers is in dit geval niet een klein onderdeeltje van een of andere enorme softwaresuite, het is dé kern van deze software. Als je dan niet eens de moeite neemt om even te brainstormen welke formaten je allemaal ingevoerd kan krijgen (streepjes, spaties, +31 of ander landnummer als prefix, lijsten, komma’s, extra tekst, controleer op correct aantal digits per nummer, hoe vergelijk je gebelde nummers met je softwarelijst, etc. etc.) dan is het geen ‘softwarefout‘ maar een onvergeeflijke blunder van een of andere ongeïnteresseerde en vooral volslagen incompetente codeklopper die bij wet verboden zou moeten worden om ooit nog een regel code te mogen schrijven. Is het een verrassing dat de overheids-ICT altijd zo’n chaos is? Wat voor prutsers worden daarvoor eigenlijk ingehuurd? Sorry voor de rant, maar als programmeur die wel altijd alle scenario’s probeert te ondervangen erger ik me echt kapot aan dit soort gepruts, zeker als het bakken met belastingcenten kost.
Geen idee of ze voor dat checkecn speciale software gebruiken of dat er even bij kwam. Ook geen idee of de programmeur echt in het proces betrokken is om afwegingen te mogen maken. Helaas zie je wel eens dat programmeurs onderdelen mogen maken en eigenlijk geen invloed op de rest hebben. Als de programmeur die de check gemaakt heeft te horen heeft gekregen dat het op manier A ingevoerd wordt en elk nummer maximaal 1x voor komt en elke advocaat maximaal 1 nummer heeft en hij gaat daar vanuit en vervolgens wordt een ander voor de voorkant gevraagd en die blijkt niet te controleren op deze zaken wie is dan fout? Om een programmeur de schuld te geven die er mogelijk niet echt tijd voor kreeg of de kans om randvoorwaarden af te dwingen gaat me te ver.
Dat het het zoveelste voorbeeld is van software bij de overheid die fout gaat ben ik het wel mee eens. Daarom mogen de gevolgen wat mij betreft ook best groot zijn als er niet aangetoond kan worden dat er met de informatie niets gedaan is die op die wijze mogelijk verkregen is. Naar enkele aanbestedingen van de overheid heb ik gekeken, in de betreffende aanbestedingen zaten elementen die niet helpen om te zorgen dat je de beste code als resultaat krijgt. Deze leken gericht om uit te kunnen komen bij een partij die ze vooraf in gedachten hadden.
Een van de belangrijkste regels voor een programmeur is toch wel dat je je input moet controleren. Daar is echt geen enkel excuus voor te bedenken.
Goed, maar als je te horen krijgt dat elke query één nummer zal retourneren en wel als een string bestaande uit tien cijfers en dat je al het overige mag negeren, wat zou je dan doen bij de invoer “0612345678,0206631941”? Ik zou het volledig begrijpelijk vinden als je de eerste tien cijfers had gepakt.
Daar kan ik me iets bij voorstellen omdat de telefooncentrale misschien soms troep terug geeft.
Maar dan nog. Een programmeur is ook betrokken bij de invoer van de gebruiker voor de whitelist. Daar kan je het controleren en als het daar aangepast wordt (omdat er plots toch twee nummers per advocaat zijn), zal je toch echt op z’n minst één keer moeten testen of je andere functies wel op de juiste manier true/false terug geven.
Als je moet werken volgens een spec die de data-uitwisseling regelt tussen jouw stuk software en software waar jij geen directe invloed op hebt, dan bouw je altijd een simpele check in of de data die je krijgt wel aan de meest basale eisen van die spec voldoet zodat je een foutmelding kan genereren. Hoe dan ook, er had een class moeten worden geschreven met:
Hier zijn ze waarschijnlijk niet verder gekomen dan direct met de hand ingevulde tekststringetjes opslaan/uitwisselen/vergelijken waarmee bewaking van de ‘spec’ niet meer dan een invulinstructie op het scherm is. Niet in het minst nagedacht over een serieuze opzet van de software.
Wanneer je met real-time systemen zit (de software moet binnen een fractie van een seconde de beslissing nemen), zit je met de vraag: Wat moet de software doen als het weet dat het GI (Garbage In) krijgt. Ik kan me heel goed voorstellen dat de ontwikkelaar van een tap-en-opname systeem besluit “bij twijfel: Opnemen”. (Achteraf opnames wissen is mogelijk; een opname uit het niets creëren niet.)
Overigens is de brief van Sander Dekker; hij is geen staatssecretaris (van OCW) meer, maar minister voor Rechtsbescherming.
Gezien de geschiedenis die justitie kent met het ‘per ongeluk’ opnemen van gesprekken met advocaten heb ik zo m’n twijfels… 2010 Afluisteren advocaat en cliënt komt voor, 2011 ‘Camera’s in spreekkamer gevangenis’. Maar die gaan alleen aan met een sleutel van een leidinggevende zegt u ? 2015 Advocaat woedend om camera’s in spreekkamer gevangenis Zoetermeer: ‘Ze staan aan’. Ook in 2015 Advocatenkantoor: AIVD tapt ons af En dan nog een column in Advocatie met een paar interessante quotes
en Dat laatste geeft wellicht een aardig inzicht in de mindset van het OM waarbinnen dit soort ‘fouten’ gemaakt worden. Once Is Chance, Twice is Coincidence, Third Time Is A Pattern.Aan het verhaal te horen lijkt het mij dat de fout is dat het systeem waarschijnlijk (dit is pure conjectie) oorspronkelijk maar 1 nummer per advocaat toestond (er is 1 database veld). De mogelijkheid voor meerdere nummers per advocaat kan dan ingebouwd worden door meerdere nummers in hetzelfde veld te stoppen (bijv. gescheiden door een comma). Dit maakt een aanpassing een stuk minder complex, maar helaas betekend het ook dat elke plaats waar dit kan gebeuren handmatig gecontroleerd/aangepast moet worden.
Misschien heeft een advocaat het systeem getest door 1 van zijn klanten hem te laten bellen met een valse bekentenis zoals “Het lichaam ligt daar begraven”. Als de politie vervolgens op die locatie gaat graven (nadat ze een tip hebben gekregen via http://www.meldmisdaadanoniem.nl dan weet je natuurlijk genoeg.
Het lijkt me meer waarschijnlijk dat hij gewoon aan een medewerker van DJI gevraagd heeft om hulp bij het testen of het nummer correct geblokkeerd was (bijv. dat het nummer correct ingevoerd was). Daarbij zal de fout aan het licht gekomen zijn. Weinig spannend, wel meer realistisch.
Is vrij makkelijk te omzeilen zoals in de VS, parallel reconstruction.
We hebben tenslotte ook meld misdaad anoniem, dus het zal vast voorkomen dat een agent even een tip inbelt waar ze vervolgens actie op kunnen ondernemen.