Logo Blog perso d'Ozwald

De l'incompétence à Pole Emploi

Par Oz le - Perso
Coup de gueule Incompétence

Ca fait plus d'un mois que je suis sans emploi et que je tente de m'inscrire à Pole Emploi. Le problème c'est que je me heurte à un mur inébranlable d'incompétence crasse...De lassitude je rend publique le dernier courrier que je leur ai envoyé, la réponse sera également rendue publique (si tant est que j'en ai une un jour). D'une part ça soulage, et d'autre part peut-être qu'un miracle pourra se produire et que quelqu'un de compétent à Pole Emploi lira ce message et débloquera la situation :

Bonjour,

Lors de mon rendez-vous d'inscription on m'a demandé des documents qui n'avaient pas été précisés dans les convocations, en particulier une fiche "relative au portage salarial", mais le problème c'est que je n'ai JAMAIS été en portage salarial. J'ai eu beau m'expliquer de toute les façons possible à la dame qui me recevait elle n'a rien voulue entendre et j'ai donc du repartir chez moi avec mon dossier de demande d'allocations sous le bras. J'ai réalisé les photocopie du contrat de travail qui m'avait également été demandé et j'ai retourné tout le dossier en ajoutant une phrase qui expliquait que, n'ayant jamais été en portage salarial (ce que vous pouvez vérifier en lisant le contrat de travail joint) il m'était impossible de faire remplir l'attestation "A remplir exclusivement par l'employeur en cas de rupture du contrat de portage salarial" (je cite le titre de la fameuse fiche que vous me réclamez...).

Je viens de recevoir par la Poste l'ensemble du dossier de demande d'allocation que vos services m'ont retournés, sous prétexte que l'attestation "à remplir exclusivement par l'employeur en cas de rupture du contrat de portage salarial" (je cite toujours le titre du fameux formulaire) n'avait pas été remplie par mon ancien employeur.

JE DEMANDE DONC A AVOIR RENDEZ-VOUS AVEC QUELQU'UN DE COMPETENT OU DE RESPONSABLE. De compétent parce qu'il pourra comprendre qu'il est complètement con de s'acharner à me demander un formulaire que je ne PEUX PAS faire remplir (je veux bien lui faire lecture à haute voix de mon ancien contrat de travail puis de la définition légale du portage salarial autant de fois qu'il sera nécessaire à ce qu'il comprenne); ou de responsable pour qu'il puisse me signer une attestation de refus d'indemnisation sous l'unique prétexte que je ne fourni pas cette fiche, ainsi je pourrai aller porter plainte et, peut-être, vous obliger à appliquer la Loi.

Je reste dans l'attente d'un retour RAPIDE de votre part.


Edit du Vendredi 11 Mai 2012,11h30 : en réponse à mon courrier j'ai reçu un accusé de réception automatique stipulant "Nous vous répondrons sous 48 heures (2 jours ouvrés), soit le Jeudi 10 Mai 2012 au plus tard ou 7 jours calendaires s'il s'agit d'une réclamation.". Sauf que nous sommes déjà à 6 jours calendaires et que je n'ai toujours eu aucune réponse...le suspens est presque palpable : vont-ils, encore une fois, mal faire leur boulot en ne répondant pas dans les temps :-D ? Ca semble plausible sachant que la dernière fois que j'ai essayé d'avoir un conseiller au téléphone j'ai appris qu'ils ne répondaient pas le vendredi après-midi (horaires officiels...).

Edit du Dimanche 13 Mai 2012, 15h12 : Bon bah toujours aucune réponse de la part de Paul en Bois. Ca aurait été surprenant aussi qu'ils respectent une échéance quelconque (qu'ils se sont pourtant eux même fixés)... Allez, disons que je vais quand même attendre jusqu'à lundi ou mardi soir avant de les relancer.

Edit du vendredi 18 Mai 2012, 00h32 : Toujours aucune réponse.

Edit du mercredi 23 Mai 2012, 22h30 : Toujours aucune réponse à mon mail. Par contre j'ai été expliquer le problème à mon employeur qui a gentiment accepté de me remplir le formulaire à la c*n que Paul en Bois s'acharne à me demander. Du coup j'ai été le porter moi-même ce matin où on m'a annoncé "un délai de quinze jour pour la relecture du dossier"... Délai qui a finalement été réduit à 5h grace à l'intervention d'une agente qui a eu la sympathie de traiter mon dossier dans la journée1 ce qui me permet de poursuivre mes démarches diverses et variées dans les temps (une autre administration m'avait fixé une date limite à vendredi pour obtenir la confirmation de prise en charge par Paul en Bois). Bref, j'espère que je peux enfin écrire les trois dernières lettres de ce billet : F.I.N.

Edit du jeudi 31 Mai 2012, 17h26 : J'ai un peu anticipé avec le "F.I.N." de la semaine dernière...Chez pole emploi ils manquent de compétence mais visiblement pas d'humour ! Vingt-six jours2 après avoir envoyé le message que je relate en haut de ce billet je viens enfin de recevoir une réponse ! Comme promis je vous le copie/colle intégralement (avec l'apostrophe manquante et sans aucun retour à la ligne...bref : exactement comme je l'ai reçu) :

C est un imprimé que nous donnons systématiquement selon certains code NAF et métiers. Ce document est justement a faire remplir quand nous avons un doute et seul l'employeur peut lever ce doute en remplissant cette demande. Votre dossier a été validé le 230512.

Comme c'est mauvais pour ma tension je ne reviendrai pas une fois de plus sur la connerie profonde qu'il y a à exiger un document "à remplir en cas de rupture du contrat de portage salarial" quand il n'y a jamais eu de contrat de portage salarial, mais je n'en pense pas moins ! Ahlala...si on ne les payait pas déjà à nuire aux demandeurs d'emploi j'aurai presque été d'accord pour qu'on les paie à prendre des cours de français et de logique.


Gorgonite le 2012/05/06 15:18

Salut Ozwald,

Surtout ne les vexes pas... plus ils sont bêtes et plus ils sont susceptibles ^^
A priori, tu dois remplir un dossier sur internet, venir à une convocation avec un feuillet jaune et priez qu'on ne te fasse pas poireauter pour un truc bidon, histoire de truquer les statistiques mensuelles des augmentations de chômage... le seul point positif a priori, peu importe la durée de cette phase laborieuse, les allocations devraient commencer au jour de ton premier rendez-vous chez eux.

Bonne chance

fred le 2012/05/17 21:23

J 'ai eue bien pire quand je me suis rébiffé suite à de nombreuses radiations sans motifs réels donc abandonnées la directrice est allée déposer plainte pour soit disant intimidation , fait gaffe quand même en ce qui me concerne ils m ont confiés être intouchable. En ce qui me concerne la plainte n'a pas tenue.
Ce sont les rois et ils ont tout pouvoir en apparence. Fait comme moi trouve du boulot rapidos et n'attend rien d'eux.

Ozwald le 2012/05/18 00:31

En effet ne rien attendre d'eux est sans doute la seule chose à faire...mais dans ce cas je pose une question ouverte : pourquoi est-on obligé de cotiser à un service inutilisable :-( ?

fred le 2012/05/21 07:31

En effet je me suis posé la même question, il serait temps de réformer cela et créer une assurance chômage indépendante ou chacun aurait la liberté de cotiser ou non en fonction de ses besoins plutôt que de cotiser pour un service qui ne sert en apparence et d'après de nombreux témoignages et forums sur le net à pas grand chose . Une économie financière serait réalisée car les fonctionnaires qui ne nous aident pas et cherchent par tous les moyens à radier ou dans ton cas ne pas t'inscrire sans t'aider dans cette démarche en apparence seraient obligés de se remettre en question et aller pointer. Cette inversion des rôles permettait à certains une meilleure compréhension et plus d'humanité avec une dose de compassion pour ceux qui cherchent réellement un emploi.

valérie le 2012/06/30 15:51

ils sont absurdes , incompréhensifs,stupides, infantilisants
, ils nous prennent pour des cons trop content d'emmerder les chômeurs, le cul assis sur une chaise avec la sécurité de l'emploi, payés à rien foutre et en plus, ils connaissent même pas leur boulot. quand l'un dit blanc, l'autre dit noir.
c'est scandaleux. on est victimes de leur connerie et en plus, faut fermer sa gueule.

kalez le 2013/09/19 12:42

Salut Ozwald, j'ai le meme probleme. Difficile de remplir un formulaire concernant le portage salarial alors que j'ai fait un simple CDD (le code NAF de la societe ne leur plait pas apparement)
Est ce que tu pourais stp me donner les reponses afin que je ne sois pas retoque stp.
PS: l'Unedic reconnait maintenant le portage salarial a condition de respecter certains criteres (qui correspondent en tout point a ce satane formulaire)

Ozwald le 2013/09/23 13:19

Désolé kalez mais je n'ai pas gardé de copie du document rempli (j'ai été le porter immédiatement après que mon ancien employeur me l'ai donné); et je ne me souviens plus des détails de la façon dont il avait été rempli (je me souviens juste qu'une grande majorité de la feuille avait été rayée, si ce n'est toute la feuille... mais il y avait le cachet de la boite en bas de page donc paul en bois était content.).

Bon courage pour essayer de faire entendre raison à cet établissement public qui refuse d'appliquer la Loi...

sebd59 le 2014/06/24 21:10

L'article date mais je suis tombé dessus. Incompétence et Pole emploi rime dans toutes les régions de France.
Inscris à Pôle Emploi en 2007, quand j'en suis arrivé à mon 4ème conseiller en 6 mois et que celui-ci faisait comme ses collègues. C'est-à-dire, rien à battre et ne faire que regarder les annonces sur le site de Pole Emploi, il a très mal pris le fait que je lui fasse remarquer que regarder le site de Pole Emploi je peux très bien le faire.
Du coup, convocation suivante, j'arrive, RDV annulé, et je reçois une nouvelle convocation de la part de Pole emploi me demandant de me présenter en mission locale, où j'apprends que j'aurais demandé à être suivi par eux. J'ai eu une période de boulot, je devais avoir un CDI donc désinscris de Pole emploi et finalement j'ai dû me réinscrire. Ils ne m'ont pas convoqué chez eux, ils m'ont directement envoyé au CCAS de ma ville. Et à chaque fois que j'ai besoin d'eux pour une télécandidature, on me fait poireauté pendant une heure pour finalement me dire qu'aucuns conseillers ne me recevra sans RDV pour ce type de demande, et pour prendre RDV, il faut voir un conseiller de Pole Emploi... Logique ??
Par contre m'envoyer à des convocations pour des postes ne me concernant pas et me menacer de me radier ça ils savent le faire. Dernière convocation, plomberie à 150km de chez moi. Problème 150km cela fait loin, mais surtout j'ai un BTS de comptabilité, de nouveau Logique ?? Heureusement que dans ce cas, les employeurs se plaignent également du Pole Emploi et comprends en validant la présence même si l'on n'est pas venu

  1. C'est dingue quand même d'en arriver à être profondément reconnaissant envers quelqu'un qui a juste fait le travail pour lequel nos propres taxes/impots paient...
  2. Ca fait une vitesse de réponse d'environ 10 lettres par jour (en comptant les espaces...). Si j'avais su j'aurai demandé une réponse en langage SMS ^^

L'arduino c'est contagieux

Par Oz le - Électronique
Hack arduino atmega robot électronique

Le 9 mars 2011 dernier (merci Twitter pour la date exacte) j'ai acheté un arduino. Depuis j'ai pas mal joué avec et j'en arrive aujourd'hui à vouloir utiliser au jour le jour certains de mes bricolages. Le problème c'est que si je dois acheter un arduino pour chaque bricolage que je veux garder et utiliser quotidiennement ça risque de taper sérieusement dans mon budget. Heureusement il y a pleins de solutions à ce problème.

Arduino UNO - Creative Common by "Beraldo Leal" on Flickr

La première solution c'est de ne tout simplement jamais utiliser d'arduino et d'oublier carrément les micro-controlleurs Atmega. L'un de mes amis, qui fait de l'électronique depuis des années, a ainsi toujours utilisé des PIC. L'avantage des PIC, par rapport aux Arduino, c'est leur prix ridicule (comptez quelques dizaines de centimes d'euros pour les plus petits alors qu'un arduino coutera minimum une quinzaine d'euros). Mais l'inconvénient majeur des PIC c'est qu'il vous faudra un programmeur matériel dédié pour uploader vos programmes dessus, et que ce programmeur dédié coute cher (comptez une trentaine ou une cinquantaine d'euros).

La seconde solution c'est d'utiliser des Atmega nu. Les Atmega c'est la famille des micro-controlleurs qui sont au coeur des Arduino. En fait un Arduino c'est un atmega avec un peu d'électronique autour pour uploader les instructions sans programmeur externe, et pas mal de logiciel pour rendre ultra simple le codage, la compilation, et l'upload sur l'Atmega. Donc quand on utilise un Arduino en fait on utilise un Atmega :) L'avantage des Atmega (et leur petits frêres les Attiny) c'est le prix du programmeur externe, en effet vous pouvez utiliser votre Arduino comme programmeur pour Atmega (via le sketch ArduinoISP, donc aucun investissement supplémentaire si vous arrivez à le faire marcher) ou bien en acheter un tout fait et dédié à cet usage (ce qui est beaucoup plus simple à mon gout) pour la modique somme de 3€ sur eBay. L'inconvénient c'est que les Atmega (et les Attiny) sont plus chers que les PIC (et qu'il existe également moins de modèles différents); mais ne vous affolez pas ça reste quand même largement moins cher qu'un arduino complet et vous n'aurez donc aucun scrupule à "investir" 1 ou 2 euros dans un Atmega destiné à rester à perpétuité dans votre bricolage numéro 3454464béta :D

Dans l'idée de fabriquer des bricolages "définitifs" je me suis donc orienté vers la seconde option : programmeur matériel dédié à acheter une fois et atmega (ou attiny) indépendant à acheter pour chaque montage "définitif". Le prix de cette migration a donc été pour mon cas de :

  • 3€ pour un programmeur dédié USBASP (acheté sur eBay)
  • 1,30€ pièce pour des Atmega8 (également achetés sur eBay)
  • ou 3,5€ pièce pour des ATtiny85 (encore et toujours achetés sur eBay) à la place des Atmega8 si je veux un tout petit montage.

Par contre en basculant sur du micro-controlleur indépendant on perd un avantage énorme de l'arduino : l'IDE et ses bibliothèques simplifiant monstrueusement la tache du codeur. A titre d'exemple voilà le code Arduino qui fait clignoter une LED (l'équivaleur électronique de "Hello World") :

void setup() {                
  // initialize the digital pin 13 as an output.
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(1000);              // wait for a second
}

Et, pour comparer, le même code pour ATtiny85 sans utiliser les librairies Arduino :

#include<avr/io.h>
#include<util/delay.h>

void sleep(int millisec) {
    while(millisec)
    {
        _delay_ms(1);/* 1 ms delay */
        millisec--;
    }
}

main() {
    DDRB |= 1<<PB3; /*PB3 is now an output*/
    while(1) {
        PORTB &= ~(1<<PB3); /* PB3 low */
        sleep(1500); /* 1.5s delay */

        PORTB |= (1<<PB3); /* PB3 high */
        sleep(3000); /* 3s delay */
    }
}

Tout de suite c'est quand même moins user-friendly. Et encore, là on fait juste clignoter une LED. Soyez assurés que quand on joue avec les interruptions c'est encore plus moche. M'enfin bon, ça reste quand même compréhensible, donc poursuivons. Quand on utilise l'IDE Arduino on branche son arduino en USB, on écrit son code, puis on clique sur le bouton "compile and upload" et c'est fini, l'Arduino se comporte comme on l'a programmé. Quand on utilise un micro-controlleur indépendant c'est "un poil" plus compliqué.

D'abord il faut brancher l'USBASP (notre programmeur matériel dédié) : Coté USB c'est trivial, coté Micro-controlleur il faut ressortir la doc des branchements. Une fois la doc sous les yeux le branchement est simple puisqu'il suffit de se débrouiller pour que les fils MOSI/MISO/SCK/RST du programmeur correspondent aux pates MOSI/MISO/SCK/RST du micro-controlleur. Ca n'a rien de sorcier mais on est obligé de ressortir le schéma à chaque fois (parce que, franchement, l'apprendre par coeur...). Branchement coté programmeur :

USBASP programmer

Et branchement coté micro-controlleur (ci-dessous pour les attiny) :

pinout attiny 25/45/85

Une fois correctement branché il faut coder (pour ça on peut être certain que vim ne nous laissera pas tomber :)). Ensuite on compile avec avr-gcc en faisant attention de bien choisir la plateforme cible :

avr-gcc -mmcu=attiny85 ledblink.c -Os -o ledblink_tiny85.o

Une fois compilé on extrait le code intéressant au format ihex :

avr-objcopy -j .text -j .data -O ihex ledblink_tiny85.o ledblink_tiny85.hex

Il ne reste plus qu'à uploader le code sur notre micro-controlleur à 3€ :

avrdude -p /dev/ttyS3 -c usbasp -p t85 -v -U flash:w:ledblink_tiny85.hex

Et "voilà" la LED qu'on a branché sur la pate PB3 de l'attiny (via une résistance de plus de 300 ohms pour ne pas la cramer) clignote gentiment. Maintenant plus rien ne s'oppose à la réalisation de montages permanents coutant moins de 10€ :) !

EDIT 14/04/2012 : chez moi par défaut avr-gcc ne trouve par le fichier "crtm8.o" et du coup il ne parvient pas à linker correctement quand je lui spécifie une cible "atmega8" à la place de "attiny85". Pour régler le problème il suffit de lui rappeler où trouver "crtm8.o" avec son option -B:

avr-gcc -mmcu=atmega8 ledblink.c -Os -o ledblink_atmega8.o -B /usr/avr/lib/avr4/

La suite reste similaire à l'exemple donné pour l'attiny85:

avr-objcopy -j .text -j .data  -O ihex ledblink_atmega8.o ledblink_atmega8.hex

Et pour l'upload on change juste l'option "-p" en mettant "m8" (= atmega8) à la place de "t85" (=attiny85) :

avrdude -p /dev/ttyS1 -c usbasp -p m8 -v -U flash:w:ledblink_atmega8.hex

EDIT2 14/04/2012 : Rajout en fichier joint d'un exemple de code réalisant deux Fast PWM sur atmega8 (typiquement pour diriger un robot)


Gorgonite le 2012/04/13 22:03

Salut Ozwald,

Clairement le "prix sur la durée" est la raison pour laquelle j'ai refusé de passer sur Arduino (joueur, mais juste pas envie de cramer trop dedans si je peux faire sans ;) )
Concernant les PIC, il est possible de ne pas acheter mais de construire quels petits trucs sympas, style http://www.tavernier-c.com/programm...
Par ailleurs une version de OCaml pour PIC existe (souviens-toi de la prépa ^^)

Gorgonite le 2012/04/13 22:34

Au passage, il est aussi possible d'investir dans un FPGA et de simuler un petit paquet de circuits sympas (dont certains dispos via opencores par exemple), et ensuite de flasher la puce en fonction du TP que l'on souhaite faire... réutilisable à l'infini tant qu'on peut synthétiser gratuitement :)

Ozwald le 2012/04/13 23:53

Hello Gorgonite !

Le programmateur PIC que tu proposes se branche sur un port parallèle quand même...en 2012 ça commence à se faire rare ;-)

S'il y a un compilateur OCaml pour PIC c'est une raison supplémentaire pour ne surtout pas aller dans cette direction lol :-p M'enfin si un masochiste traine sur ce blog il sera heureux de l'apprendre donc en son nom : merci pour l'info.

Les FPGA c'est clairement la classe au dessus niveau puissance et versatilité, mais c'est malheureusement nettement plus cher (sinon ça fait un moment que je casserai du mdp sur FPGA@home ;-)). Tu as craqué et tu t'en es acheté un toi :) ? En tout cas pour mes besoins actuels des petits atmega reprogrammables "à l'infini" avec un programmeur à 3€ ça me suffira bien (après tout y'a carrément un malade qui a réussi à faire tourner linux sur un atmega : http://dmitry.co/index.php?p=./04.T... )

Gorgonite le 2012/04/14 18:19

Tout geek digne de ce nom a encore une machine avec un port parallèle...
Disons que ce genre de plan traine sur le net, suffit de se baisser pour en avoir à disposition.
http://www.geii.iut-nimes.fr/fg/wp-...
http://www.technologuepro.com/monta...

Par ailleurs, même en achetant une carte tout prête, est-ce vraiment moins cher que ta solution ? (si l'on ne tient pas compte du fait que tu partais déjà avec des finances amputées par Arduino ^^)
Au passage, tu as sûrement déjà vu ceci :
http://www.robot2009e2i.toile-libre...

Concernant le FPGA, non je n'en ai pas (encore) acheté... C'est prévu (ticket d'entrée estimé à 200€ si je fais mon fainéant), j'attends juste d'avoir un projet sympa en tête et surtout beaucoup de calme durant mes WE. Mais clairement, c'est plus prévu pour tester, mais pas pour "garder en marche" (on peut tout simuler, puis synthétiser et tester sur FPGA... avant de rebasculer sur une plate-forme plus conventionnelle si vraiment ça doit être utilisé sur la durée -- et donc à moindre coût énergie/matériel)
Pour le moment, je me contente de jouer sur simulateur.

Sachant que mon but est aussi de m'amuser à faire des back-ends de proto déjà développés, vers des solutions peu onéreuses... afin de faire du systèmes complexes à prix raisonnable (en vue de domotique hacké maison par exemple :) )

miaousami le 2012/04/16 10:54

Alors mister Oz, ça programme dur ?

trackinnewtech le 2013/09/10 07:39

Pourquoi en basculant sur du micro-controlleur indépendant on perd : l'IDE et ses bibliothèques simplifian la tache du codeur ? Ne faut il pas juste acheter une puce atm avec boatloader et ainsi vous garder tous ces avantages ? Cet exemple montre ce type d'approche et le code s'appuie sur les lib arduino http://blog.idleman.fr/raspberry-pi...

kit le 2014/11/09 14:39

N’importe quel programmeur universel (minipro, etc.) avec AVR studio qui permet de compiler et de récupérer un fichier HEX a reprogrammé...

C’est encore moins cher, simple et rapide

Du capitalisme

Par Oz le - Sécurité
Bounty Outil PHC PHP Vulnérabilité code source exploit

L’Académie française propose une définition simple du capitalisme : le capitalisme est un « régime économique dans lequel les moyens de production sont propriété privée ». Dans la pratique, il est patent que le terme est loin d'être doté d'une acception consensuelle. D'où l'existence de nombreuses significations différentes, dont une se basant sur la mécanique d'accumulation du capital comme facteur de production.1

Billets de monopoly - Creative Common by graciepoo on Flickr

Dans l'acceptation du "capitalisme" telle qu'ébauchée en introdution de ce billet "l'accumulation du capital comme facteur de production" est l'un des fondamentaux, et en ce sens je suis un capitaliste de l'informatique. Cette réflexion m'est venu il y a déjà pas mal de temps en lisant une présentation (dont j'ai malheureusement oublié les références :( ) sur la façon de faire efficacement du fuzzing. Dans cette présentation il y avait un slide expliquant qu'écrire un fuzzer évolué n'était pas une bonne façon de faire du fuzzing, mais que la bonne façon de faire du fuzzing c'était d'écrire un fuzzer évolué pendant qu'un fuzzer écrit en 30s tournait. Ainsi, lorsque je me suis finalement mis à jouer un peu sérieusement avec de l'audit de code statique (environ un an après mes premiers tests dans le domaine) j'ai appliqué cette stratégie. Ce sont les premiers résultats de ces recherches que je vais relater dans ce billet.

Les outils

Adhérant totalement à la philosophie du "je travaille sur un bon outil pendant qu'un outil pourri que j'ai écrit en 10mn est déjà en train de tourner" j'ai donc commencé à analyser du code source PHP avec une dizaine de lignes de python qui se contentaient de :

  • Télécharger un projet PHP sur sourceforge/drupal/wordpress
  • Décompresser l'archive du projet
  • Faire l'équivalent d'un grep sur l'ensemble des fichiers PHP contenus dans l'archive
  • Effacer le repertoire temporaire dans lequel j'avais téléchargé et décompressé l'archive (ça a l'air con mais vu la simplicité du projet une fonctionnalité, même aussi triviale, compte).

Voilà quelques exemples des expressions régulières que ce mini script cherche:

  • (XSS) .*echo .*$_GET.*
  • (XSS) .*echo .*$_POST.*
  • (XSS) .*echo .*$_REQUEST.*
  • (SQLi) .*SELECT .* FROM .* WHERE .* $_GET.*
  • (SQLi) .*SELECT .* FROM .* WHERE .* $_POST.*
  • (SQLi) .*SELECT .* FROM .* WHERE .* $_REQUEST.*
  • ([LR]FI) .*require($_GET.*
  • ...

Bref, cette première version était vraiment très rustique et pourrait être re-codé 100% en bash à coup de wget, unzip, et grep.

Pendant que cette première version tournait je me suis penché sur l'utilisation de PHC. L'idée est de réaliser ce dont je parlais dans mon vieux billet, à savoir d'utiliser PHC pour convertir le code source PHP en une représentation plus simple, et de réaliser une analyse par propagation de teinte sur cette représentation simplifiée. PHC propose 3 représentations intermédiaires, la plus simple d'entre elle étant la "MIR" c'est celle-ci que j'ai choisi (au format texte brute plutôt qu'XML) : phc --dump=mir mon_fichier.php

Une fois mes fichiers PHP convertit en représentations "MIR" je parse le texte résultant pour en extraire des blocs de codes, chacun portant une étiquette utilisée par la représentation MIR pour d'éventuels GOTO, puis je débute ma simulation de propagation de teinte par la première ligne du premier bloc. A chaque assignation de variable rencontrée :

  • j'enregistre son nom dans un dictionnaire
  • je lui associe une valeur de teinte (si la variable se voit attribuée une constante la teinte est nulle, si elle se voit attribuée une variable de type $_GET[...] elle obtient une valeur de 1, si elle se voit attribuée la concaténation de deux autres variables sa teinte est la somme des teintes des variables concaténées, etc.)
  • je lui attribue une représentation (si son assignation est une constante je la reprend comme représentation, si son assignation est une variable sensible type $_GET[...] j'utilise ça, si on lui assigne la concaténation de variables je lui attribue la concaténation des représentation des variables concaténées, etc.)

Lorsqu'une fonction est appelée je regarde si son nom apparait dans l'une des listes de "fonctions sensibles" que j'ai hardcodé2 et si tel est le cas je vérifie la teinte de la variable utilisée en argument. Si la teinte n'est pas nulle je lève une alerte en spécifiant la valeur de teinte utilisée, la représentation de la variable incriminée, et la famille de la fonction sensible (XSS, SQLi, [RL]Fi, PHPi).

Ce deuxième outil, bien qu'encore extrèmement rustique (246 lignes de python (199 sans les commentaires)), est sensiblement plus efficace que mon grossier "grep-like", comme nous allons voir tout de suite.

Les résultats

Ecrire un outil d'analyse de code c'est bien, mais encore faut-il avoir du code à analyser (et taper aléatoirement dans sourceforge c'est amusant deux secondes mais ça lasse vite) ! C'est donc en me demandant ce que j'allais bien pouvoir analyser que je me suis souvenu de cette liste de "bounty programs", et en particulier du dernier programme listé : celui de White Fir Design. Cette entreprise américaine, que je vous invite à découvrir, propose plusieurs bounty programs sur des logiciels open source dont un sur Wordpress et ses plugins téléchargés à plus d'un million d'exemplaires. C'est donc sur cette cible que j'ai testé mes deux outils d'analyse de code.

Pendant que j'écrivais mon outil de propagation de teinte basé sur PHC le premier script (grep-like) a relevé un nombre important d'alertes. C'est là que l'un des gros défaut de cette approche se fait sentir : il y a énormément de faux positifs. Par exemple la ligne suivante, bien que n'étant absolument pas vulnérable à quoi que ce soit, remonte à chaque itération de mon script comme un XSS potentiel :

echo(isset($_GET['session']) ? '?session=1' : '');

Malgré ces faux positifs j'ai tout de même réussi à confirmer quelques vulnérabilités de type XSS dans des pages d'admins de plugins téléchargés à plus d'un million d'exemplaire, et j'ai donc eu la double joie de toucher un petit bounty3 tout en ayant le sentiment d'avoir rendu internet un peu plus sûr (tout ça avec grep...).

Une fois mon script d'analyse par propagation de teinte terminé je l'ai relancé sur le même périmètre et, après quelques réglages, j'ai eu le plaisir de voir qu'il parvenait à identifier l'ensemble des XSS que mon grep-like avait trouvé et que j'avais confirmé. Non seulement il obtient donc d'aussi bon résultats mais, en plus, le nombre de faux positif est nettement plus faible (la majorité de ceux qui restent sont dus à la non-prise en charge des fonctions de "sanitize-check" type preg_match...il faudra que je rajoute le support de ces vérifications à l'occasion). Enfin, cerise sur le gateau, la version par propagation de teinte a réussi à lever un lièvre que le "grep-like" n'aurai pas pu avoir (parce que plusieurs lignes de code étaient impliquées) : une jolie time-based-blind-SQLi.

En guise de conclusion sauvage qu'est-ce-qu'il y a à retirer de tout ça ?

  • que l'analyse statique de code, même dans ses versions les plus rustiques (grep) peut encore être utile de nos jours.
  • que l'approche consistant à faire tourner un outil pourri pendant que l'on travaille à la fabrication d'outils plus évolué est une bonne approche (en tout cas moi je l'aime bien, elle me donne l'impression que mon temps CPU est utile et, en remontant des résultats de temps en temps, elle me garde motivée sur le codage des outils performants et prépare les cas de tests sur lesquels on pourra tester les outils performants :) ).
  • que l'équipe de White Fir Design est impressionante (ces gars donnent de l'argent pour aider à sécuriser des logiciels dont ils ne retirent qu'indirectement profit, moi je trouve ça fort !)
  • que les développeurs de plugins Wordpress sont généralement très sympa (j'ai eu à chaque fois des retours très cools de leur part)
  • que le code de Drupal est plus sécurisé que celui de Wordpress (ou que mes outils lui sont moins adaptés et/ou que j'ai eu moins de chance avec Drupal qu'avec Wordpress).

Gorgonite le 2012/01/23 20:08

Salut Ozwald,

1) un grep simple est a priori une analyse, certes statique, mais surtout purement syntaxique... là où la propagation de teinte est une analyse statique sémantique

2) le problème des faux positifs vient des abstractions (dans ton cas, généraliser une erreur pour ne pas avoir à traiter 36 cas...) par ailleurs, il faudrait vérifier la sûreté de ton analyse, seule propriété pouvant assurer l'absence de faux négatifs (en gros, Coverity vs Polyspace)

3) enfin, il faut aussi parfois faire attention à la complexité spatiale des analyses,

4) parfois aussi prévoir des analyses par point fixe (voire accélérateurs de convergence, élargissement, etc). As-tu des bases en interprétation abstraite ?

Au passage, as-tu jeté un coup d'oeil sur Phantm ?

https://github.com/colder/phantm

http://infoscience.epfl.ch/record/1...

Gorgonite le 2012/01/24 20:44

un petit lien sur l'analyse statique sérieuse sur des codes de taille un peu réaliste ^^

bon ok, c'est Microsoft Research, mais c'est bien illustré je trouve
http://www.immunityinc.com/download...

Bonjour666 le 2013/07/14 23:35

Salut,
Je suis en terminale S et j'aimerais bien comprendre + qu'un mot de ton article :) Donc pourrais-tu résumer en gros le but de ce que tu as fais ?

Ozwald le 2013/07/18 18:17

En gros ça donne ça : Le but c'est d'identifier, dans du code source, des erreurs de programmation menant à des vulnérabilité de type "injection de code" (que cela soit du code HTML/Javascript, SQL, ou PHP). Concrètement, cette recherche d'erreur est réalisée en simulant l'exécution du programme tout en propageant une teinte.

Pour simuler l'exécution du programme facilement j'utilise PHC qui me traduit le code PHP en quelque chose de BEAUCOUP plus simple à lire (i.e. la représentation "MIR", spécifique à PHC; mais j'aurai pu également utiliser une représentation AST, plus commune : http://en.wikipedia.org/wiki/Abstra... ).

Et pour la propagation de teinte, tu en as les bases expliquées dans la présentation "Dynamic Taint Propagation: Finding Vulnerabilities Without Attacking" réalisée à la Blackhat DC 2008 ( https://www.blackhat.com/html/bh-dc... ).

Si quelque chose t'échape encore n'hésite pas à demander ;)

  1. Toute l'intro est largement pompée de : http://fr.wikipedia.org/wiki/Capitalisme
  2. print,->get_var,->get_results, ->query, mysql_query, require, require_once, include, eval
  3. Bounty immédiatement dépensé sur eBay en composants électroniques divers et variés pour mon arduino

Brèves du jour

Par Oz le - Geek
I.A. Outil Réseau python scripts

Un mini billet pour deux petites brèves : une astuce python (déjà bien connue, mais plus on réplique ce genre d'info moins on a de mal à la retrouver quand on l'a oublié), et un pointeur sur un jouet sympa.

Tools - Creative Common by mtneer_man on Flickr

Tout d'abord l'astuce python : comment changer son user-agent quand on utilise la librairie urllib. C'est un problème ultra-classique puisque pas mal de sites font du filtrage sur ce user-agent et refusent de répondre quand ils repèrent un script python1. En fouillant sur le net on trouve pleins de méthodes plus ou moins bidons (certaines se contentent carrément de rajouter un second header "user-agent", ce qui n'est évidemment pas ce que l'on cherche à faire), et après en avoir testé au moins une demi-douzaine voici celle que j'utilise à présent (et qui marche :D) :

import urllib
# ============ USER AGENT MAGIC ===========
class UAOpener(urllib.FancyURLopener):
        version = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'
urllib._urlopener = UAOpener()
# =========================================

Et voilà :) Comme pour le passage via TOR c'est tout ce qu'il y a à faire. Accessoirement j'ai réalisé récemment que le dernier paramètre de "setdefaultproxy" que j'utilise pour passer par TOR souffre un bug ennuyeux : il est ignoré :-D Donc que vous mettiez à "True" ou à "False" les résolutions DNS ne passeront JAMAIS par votre proxy socks (et donc par TOR)...ennuyeux n'est-ce-pas ? En tout cas maintenant vous êtes prévenus :)

Le petit jouet maintenant : ça n'a rien de nouveau non plus, mais c'est tout de même un jouet rigolo. Il s'agit du WOrdnet Libre du Français2. Pour ceux qui connaissent Wordnet : c'est Wordnet pour le Français ;) Pour ceux qui ignorent ce qu'est Wordnet c'est une base de donnée concernant le sens des mots et leurs relations les uns avec les autres. Un usage immédiat de Wordnet c'est de trouver des synonymes (dans la langue française avec WOLF, dans la langue anglaise avec le Wordnet original), un autre usage consiste à mesurer la proximité de sens entre deux mots par exemple. Les possibilités sont vraiment nombreuses, notamment en data-mining. Bref vous pouvez le télécharger ici au format XML, et ces trois mini remarques pourraient vous êtes utiles si vous voulez travailler avec :

  • Le document ne contient pas de balise racine, ajoutez donc en une si vous voulez que xmllint --format ou xml.dom.minidom.Parse ne vous insulte pas. Par exemple un petit <wolf> en début de document et un petit </wolf> en fin de document feront parfaitement l'affaire.
  • Les & ont tendance à faire crier le module python xml.dom.minidom. Pour ma part je les ai donc purement et simplement supprimés grâce à un petit sed.
  • Le XML pèse 38Mo sur disque, une fois parsé par xml.dom.minidom mon interpréteur Python prend plus de 1Go ;-) Veillez donc à avoir de la RAM disponible.

Gorgonite le 2011/10/22 13:45

MiniDOM... tu cherches aussi les ennuis pour traiter une telle quantité de données :p

  1. Par exemple wikipedia.
  2. WOLF

metasm, en mieux (ou pas)

Par Oz le - Sécurité
Gentoo Outil Reverse Engineering miasm python

Oz2020Migration : True

Il n'y a que deux choses qui manquent à Python, à mon humble avis : metasploit, et metasm. Or il semblerait qu'il y a quelques jours/semaines, l'un de ces deux manques ait été comblé par miasm, l'équivalent de metasm en python ! J'étais donc obligé de faire au moins un petit billet là dessus :)

Engine - Creative Common by "cbowns" on Flickr

Comment installer miasm ? La page officielle du projet est relativement claire, mais ne s'applique pas immédiatement (en particulier quand on est sous gentoo). Voilà donc la démarche que j'ai suivi, ce n'est peut être pas la meilleure mais "chez moi ça marche"(c). D'abord voyons les dépendances :

  • Grandalf (https://github.com/bdcht/grandalf) in order to render graphical disassembler.
  • Modified libtcc (http://bellard.org/tcc/) to Jit code for emulation mode. see below
  • python-ply for parsing
  • numpy
  • python-virtualenv
  • python-dev
  • python-qt4

Allons y par étape en adaptant pour gentoo :

Grandalf viendra tout seul quand on clonera le méta-répertoire, on ne s'en occupe donc pas.

Concernant la libtcc on va suivre les instructions tout simplement : git clone git://repo.or.cz/tinycc.git puis on édite le Makefile conformément à ce qu'indique le site de miasm, puis make...échec texi2html: Command not found...Pas de problème emerge -v texi2html puis on re-tente le make : victoire ! Il ne reste plus qu'à make install.

Pour "python-ply" il faut en fait installer "dev-python/ply", sauf qu'il est masqué par le keyword x86. On démasque donc et on installe joyeusement : echo "dev-python/ply ~x86" >> /etc/portage/package.keywords && emerge -v ply

Pour "numpy" rien de plus simple emerge -v numpy.

Idem pour "python-virtualenv" qui s'installe sans poser de problème avec un simple emerge -v virtualenv

Pour "python-dev" c'est encore plus simple : rien à installer puisque nous sommes sous Gentoo :)

Enfin "python-qt4" est lui aussi assez simple à obtenir puisqu'il suffit d'un emerge PyQt41

Maintenant on clone le répertoire hg clone https://code.google.com/p/smiasm/ smiasm...fail. Après un emerge -v hg-git ça ne se passe pas mieux...Après quelques recherches la version de mercurial stable sous gentoo est la 1.7, or le support des subrepository GIT n'apparait dans mercurial qu'à partir de 1.8 -_- ....bon...echo "=dev-vcs/mercurial-1.8.2 ~x86" >> /etc/portage/package.keywords && emerge -v =dev-vcs/mercurial-1.8.2...damned ça foire encore. Après un poil de trifouillage il semblerait que ça soit le clonage de grandalf qui foire...probablement à cause du .hgsub du répertoire smiasm qui pointe (à tort?) vers [git]https://github.com/bdcht/grandalf ...Bon on clone grandalf à la main git clone git://github.com/bdcht/grandalf.git, et également miasm parceque "chezmoiçaapasmarché"(c) hg clone https://code.google.com/p/miasm/ miasm -v --traceback ainsi que le README.txt qui est à la racine du repository smiasm et, plus important : pyMakefile et Makefile. Pfiou, tout ça ! Maintenant on revient sur le chemin tracé par le site officiel : on tape donc make && make install dans le répertoire de smiasm..victoire :) !!!

On teste si tout marche bien cd miasm/example/ && python disas_and_graph.py /bin/ls ...FAIL NameError: global name 'route_with_nurbs' is not defined

Bon, on re-trifouille et je vous fait grace des détails. Au final la méthode que j'ai employé (et qui marche sur gentoo et ubuntu 10.4 une fois les dépendances de chaque distro réglées) c'est :

  1. D'abord on se débarasse du problème de TCC en suivant à la lettre les instruction du site officiel smiasm : clone git://repo.or.cz/tinycc.git, ensuite on rajoute "-fPIC" dans les CFLAGS du fichier Makefile (CFLAGS+=-g -Wall -fPIC) puis on compile/installe : ./configure && make && make install
  2. Maintenant on attaque smiasm à proprement parler : On clone une première fois smiams : hg clone http://code.google.com/p/smiasm/, ça se termine avec un message d'erreur mais "pas grave". On télécharge ensuite à la main les fichiers Makefile et pyMakefile depuis l'accès HTTP au repository (http://code.google.com/p/smiasm/source/browse/)
  3. On clone à la main grandalf parce que le .hgsub de smiasm utilise une notation exotique qui n'est comprise ni par le mercurial gentoo par défaut ni par le mercurial ubuntu 10.4 par défaut : cd smiasm && rm -Rf grandalf && git clone git://github.com/bdcht/grandalf.git grandalf
  4. On fait un rollback de version de grandalf puisque les versions commitées depuis juillet dernier ne semblent plus compatibles avec miasm (disparition de la fonction route_with_nurbs) : git checkout a851b359185132645d9dce3d11037f3263604358
  5. Il ne reste plus qu'à compiler et installer smiasm :) ! cd .. && make && make install

A présent on peut tester le tout cd miasm/example/ && python disas_and_graph.py /bin/ls. Victoire :

miasm - test script

Il ne nous reste plus qu'à dévorer la documentation pointée par Sid2 et à nous les joies du bas niveau avec encore plus de facilité ! A bientôt donc pour de nouveaux billets passionants (en tout cas j'espère qu'ils réussiront au moins à me passioner lors de leur rédaction lol) !


ipv le 2011/08/30 15:25

Pour l'install auto sur debian/ubuntu :
http://www.ring0.me/scripts/miasm_i...
;)

Ozwald le 2011/08/30 22:43

J'avais déjà vu le script mais je ne dois pas avoir de bol parce, "chezmoiçamarchaitpas"(c) malheureusement :-(

Ceci dit, encouragé par l'intéret porté à mon mini retour d'expérience ^^, je viens de refaire quelques bidouilles et finalement le clonage du git grandalf fonctionne sur la gentoo à condition de rajouter le flag "gnutls" à mon package curl (j'étais encore en "ssl" simple, oui j'ai honte :-/)

Ce qui m'inquiète un poil c'est que le clonage de grandalf me descend une version où "route_with_nurbs" n'existe pas dans "grandalf/routing.py" donc je me dis que, probablement, le problème de version de grandalf se pose toujours et que le script "example/disas_and_graph.py" ne marchera toujours pas (ce qui ne semble pas adressé par le script. Je suis le seul à avoir ce problème de "route_with_nurbs" ?)

...Bref assez de digression Gentoo, revenons aux debian-like : je viens de revérifier sur internet (n'ayant pas accès à mon ubuntu en ce moment pour vérifier sur pièce) et la version de git qui vient avec lucid (10.04, la dernière LTS) c'est la 1.4.3-1, donc on a probablement trouvé d'où venait mon problème de fetch puisqu'il faut un git plus récent que 1.5.6-4 :-/ En résumé : pour ubuntu il faut donc au moins être en maverick (10.10) pour que le clonage git (et donc le script) fonctionne puisque Maverick propose la version 1.6.3-1.

Seule question qui reste en suspens : quid de la version de grandalf clonée et de la disparition de la fonction "route_with_nurbs" dans grandalf/routing.py qui semble pourtant être utilisée par miasm ?

serpi le 2011/08/31 18:30

Yop

oué le capitaine igloo qui maintient Grandalf avait une merde sur un patch, c'est pour ca que le meta repo SMIASM avait un pointeur grandalf sur l'avant dernier patch, qui du coup, n'est pas appliqué quand on clone a la main. Tout devrait rentrer dans l'ordre (ainsi que le .git) sous peu. (ou pas, bien évidement)

ps:chémoicamarche
pps: fais gaffe, tu disasm un binaire /bin/ls ELF64 en utilisant le moteur de disasm 32 bit, d'ou un code étrange.
ppps: je réponds a la future question: non le moteur 64 bit de disasm est pas fini

The Rasta Gods are pleased for your sacrifice.

  1. Ce qui peut prendre pas mal de temps si jamais vous devez recompiler qt-core :( ...
  2. Merci d'ailleurs, sans ce blog post je ne l'aurai jamais trouvé lol

« Page 5 / 11 »