Skip navigation.

devloop :: blog

Blog sur la sécurité informatique, la programmation, Linux et le Web

Posts tagged with "java"

Plantages sous Linux

, , , ...

J'ai beau aimer Linux penguin et dire régulièrement du mal de Windows (la gestion des fenêtres est tout simplement exaspérante face à un bon KDE), j'admets tout de même volontier que Linux est aussi sujet à des plantages.
MAIS quand ça survient sous Linux, on se dit qu'il y a une bonne raison et que surtout il y a une façon de trouver quelle en est la cause et d'agir pour que ça ne se reproduise plus. C'est tout l'avantage d'un système open-source face à un système propriétaire où l'on peut juste... subir et espérer que les devs découvrent puis décident finalement de corriger le problème :frown:

Je ne sais plus exactement depuis combien de temps j'ai ce souci mais ça fait un bail... en fait probablement depuis que j'ai Shirley :eyes:
Le symptôme est toujours le même : tout d'un coup le disque dur se met à gratter et les commandes ne répondent plus. Seul le curseur de la souris est d'accord pour réagir (par intermittence). Si on est suffisamment rapide (c'est rare), on peut parvenir à fermer les applications et éviter le pire.
Le pire (qui est tout de même loin d'être l'enfer mais très énervant) c'est que le système reste inutilisable et gratte pendant un bon moment. Ca peut durer jusqu'à une demi-heure dans mon cas.
Ce comportement est typique d'un programme quelconque qui explose son utilisation mémoire et, une fois la RAM complètement utilisée, s'attaque à la SWAP (d'où l'utilisation intensive du disque dur)

Si on est patient, tout se termine "bien". Le kernel s'est chargé de tuer toutes applications graphiques, le WM et Xorg inclus (bref la crémerie avec la crémière et ses yaourts) et on est bon pour se relogger.
Quelques minutes plus tôt on s'acharnait à faire des Ctrl+Alt+F1 dans l'espoir de pouvoir régler nous même le problème.

Il est très difficile de déterminer quel programme est à l'origine du plantage... surtout quand on a toujours les même programmes ouverts p:
Longtemps j'ai soupçonné le "operapluginwrap" qui est le programme qui gère les plugins sous Opera. Son utilisation du CPU grimpe en flèche dès que l'on tombe sur du Flash (d'où l'utilité d'un FlashBlocker pour limiter les dégats).

Au même titre, j'ai soupçonné Vuze (client BitTorrent développé en Java), ce qui m'a poussé à passer à Deluge récemment.
Mais si on suit la logique, le souci pourrait aussi bien être lié à Firefox (souvent ouvert aussi) ou des daemons (mysqld, apache, tor...)

Malgré le passage à Deluge, le souci est réapparu. Je suis donc allé fouiller dans les logs :sherlock:
La dernière fois j'avais vu des appels à un programme nommé "kwin_killer_helper", sorte de soupape de sécurité de KDE qui tente de fermer des programmes quand ça part en sucettes... seulement son action a l'air peut efficace est surtout l'application n'est pas configurable :frown:

Cette fois j'ai remarqué des références à "oom-killer". Il agit de la même façon que kwin_killer_helper mais au niveau du noyau.
Le problème c'est qu'il semble reporter seulement le programme qui fait déborder le vase or ce n'est pas forcément celui qui s'est chargé de le remplir à 99%... toutefois en faisant des statistiques, on peut en déduire les programmes qui sont plus gourmants que les autres.

Ainsi un grep sur /var/log/messages me donne 9 "java invoked oom-killer", 1 pour opera, 1 pour policykit-kde et le dernier en date pour klipper :eek:
Le bon côté c'est qu'en abandonnant Vuze le problème apparait moins souvent mais il reste toujours présent :frown:

Si je regarde dans les logs plus anciens (archivés par logrotate), on retrouve java mais sont aussi mis en cause hald-addon-stor et mysqld Homer: Doh!

Si on effectue des recherches sur Google, on retrouve tous un tas de programmes variés qui ont "invoqué" oom-killer dont certains sont réputés stables.
Le souci semble donc venir d'ailleurs.

Pour certains, le souci est lié à la taille de la SWAP... il faudrait qu'elle soit au moins de la taille de la RAM. Je ne dirais pas que je n'y crois pas une seconde... mais presque (va pour deux secondes d'incrédulité :rolleyes: )
Pour d'autres (et sans doute plus fiables) et ici, ce serait lié à l'utilisation d'un système 32bits avec une machine 64bits (ce qui est mon cas).
Je vais probablement suivre la seconde possibilité mais je ne compte pas réinstaller mon système pour le moment (j'attends la version 11.2 d'openSUSE) p:

Pour le moment j'ai vu ici que chaque processus a dans /proc/ des fichiers oom_adj et oom_score dont il serait peut-être bon de connaître l'utilité :confused:
Et enfin un comique a enregistré le domaine oomkill.net sur lequel ont peut lire le boût de kernel correspondant à ce tueur de gaspilleurs de mémoire (oom = "Out Of Memory") :ninja:

Wapiti 2.0.0 Béta

, , , ...

Alors que Wapiti a dépassé doucement mais surement la barre des 16200 téléchargements sur SourceForge, les plus observateurs auront remarqué la sortie d'une version 2.0.0 béta avant-hier soir.

La question que vous vous posez certainement c'est comment l'on peut passer d'une version 1.1.7-alpha à une version 2.0.0-béta...
Tout simplement avec beaucoup de changements !! Et il s'en est passé des choses depuis la sortie de la précédente version.

Premièrement, le nombre de développeurs est passé de 1 à 3 grace à l'aide de 2 développeurs espagnols de ICT-Romulus.
Leur souhait était de pouvoir apporter des nouvelles fonctionnalités à Wapiti, notamment pour faciliter son intégration dans un projet de framework J2EE basé sur Maven (si j'ai tout compris lol).
Dans tous les cas ils ont proposé de participer au développement de Wapiti afin que tout les utilisateurs puissent profiter de leurs idées et de leurs modifications :smile: Cela est passé par la mise en place d'un espace SVN pour le projet pour faciliter le développement.

Leur objectif principal était de travailler sur le rendu final fournit par Wapiti. Ainsi il est possible d'obtenir un compte rendu des vulnérabilités dans 3 formats différents : XML, HTML et texte simple. Pour cela les options -f (format) et -o (output) ont été rajoutés.
Ils ont aussi réussi à séparer les payloads du code, ce qui rend plus simple leur ajout. Le code a été aussi revu et est plus modulaire.
Des règles de détection pour les failles SQL ont aussi été rajoutées.

De mon côté j'ai pû enfin résoudre le problème des boucles sans fin lors du scan d'urls en ajoutant l'option -n (ou --nice) qui permet de définir un "seuil de tolérance" au niveau des urls du même type.
Ainsi si les pages suivantes ont déjà été scannées :
http://server/p?a=x&b=1&c=x
http://server/p?a=x&b=2&c=x
http://server/p?a=x&b=2&c=y

Avec un seuil de 2, quand l'url "http://server/p?a=x&b=3&c=x" sera trouvée, elle sera exclue car déjà 2 urls du même pattern ont déjà été trouvées (http://server/p?a=x&b=*&c=x).
Même chose avec l'url http://server/p?a=x&b=2&c=z.
Par défaut aucun seuil n'est spécifié (ce qui revient à le fixer à 0). A vous de voir la valeur qui vous semble juste (10 me parait en bon compromis pour faire beaucoup de possibilités sans tourner en boucle).

J'ai aussi réussi à faire fonctionner l'authentification HTTP (option -a) en pompant sur le code de sqlmap. Même si les instructions sont sensiblement différentes par rapport à ce que Wapiti faisait, le principe est le même et je ne saurais pas dire pourquoi ça ne fonctionnait pas auparavant (alors que proxies et cookies fonctionnaient)... un des mystères de Python :left:
Malheureusement, étant donné la façon dont les modules urllib2 fonctionnent, il est préférable de retirer l'authentification sur le serveur et d'utiliser Wapiti simplement. En effet pour chaque url, si l'authentification est présente, Python va émettre deux requêtes : une première sans authentification qui va renvoyer une erreur 401. Et une seconde avec les identifiants pour passer la vérification :left:

Enfin la nouvelle méthode de scan XSS est complètement implémentée et la librairie Beautiful Soup a été mis à jour.

Pour la prochaine version, différents changements sont à faire comme pouvoir gérer les erreurs HTTP 500 (nouveau bug), améliorer la qualité des rapports de scan, limiter le nombre de plantages liés au décodage Unicode :frown: et enfin travailler sur la vitesse de scan de Wapiti.
En effet lors de certains tests, on s'apperçoit que Wapiti peut avoir un effet DoS sur le serveur web (voir que les 152 process lancés par Apache pour répondre aux requêtes sont tous occupés c'est pas top...) Il faut donc essayer d'envoyer le plus de requêtes possibles par connexion (ou trouver la juste proportion entre les deux)

Dans tous les cas, je ne peux que vous conseiller de passer à cette nouvelle version qui apporte des fonctionnalités importantes :smile:

Télécharger Wapiti-2.0.0-béta.

ThumbStego

, , , ...

Je viens de tester ThumbStego (pour "Thumbnail Steganography"), un nouvel outil permettant de dissimuler des données dans des images.
Jusque là, rien de bien nouveau, il existe un tas d'outils qui permettent de cacher de l'information dans des images. Là où ce logiciel se démarque des autres c'est que contrairement à la majorité (et pngstego dont j'avais parlé en fait partie), ThumbStego ne se base pas sur la méthode LSB qui consiste à utiliser le bit de poids faible de chaque octet.

La description du logiciel, telle que trouvée sur PacketStorm, est la suivante :

Thumbnail steganography creates a thumbnail from a source image and stores data in it by altering the color channels. To decipher the data, a new thumbnail is made from the original image and the differences between the pixels are calculated. This is intended to increase complexity of automated deciphering of images containing extra (steganographied) data. It requires both the original and the thumbnail to decipher. The original works like a key to unlock the thumbnail.

Je ne saurais pas expliquer en détail le fonctionnement de cet outil, les courageux se pencheront vers les sources en Java. Ce qu'il faut retenir c'est principalement la génération d'une image miniature de l'originale, créée de façon à ce que l'originale ait un rôle de masque pour extraire les données cachées :smile:

Pour utiliser le logiciel, vous aurez besoin d'une version récente de Java sans quoi un message d'erreur de version vous jette, ou alors vous devrez recompiler le programme. De mon côté j'ai opté pour la première solution et ait installé la version 1.6 de Java (j'avais la 1.5).
Armé d'une image et d'un fichier texte, le me suis placé dans le répertoire bin (une fois l'archive de ThumbStego décompressée) et ait tappé la commande suivante :
java -cp . tstego/TStego E sdreams.jpg out.png 17941-8.txt S

Ceci m'a généré l'image miniature out.png... à la regarder avec un éditeur hexadécimal, rien ne se laisse deviner que ce fichier cache des données à sa façon.

L'image et sa miniature :


Pour extraire les données :
java -cp . tstego/TStego D sdreams.jpg out.png secret.txt

Et on découvre alors qu'une vingtaine de fables de La Fontaine y étaient dissimulées :smile:

Pour résumer ThumbStego utilise un concept très intéressant et comble du bonheur offre un ratio qui a l'air pas mauvais du tout.
Certes je n'ai pas fait de calcul, mais l'option S permet de générer une miniature la plus petite possible en prenant en compte la quantité de données à cacher. Avec une miniature réduite de seulement 1%, il est évident que le ratio est bien plus intéressant qu'avec les outils standards.
Rien que dans mon exemple, le texte fait environ 29% de la taille de la miniature en étant loin de forcer les capacités du soft... avec d'autres outils on aurait eu un ratio de 12.5% (1/8 pour le LSB).
On regrette juste que le logiciel soit un peu lent (de grosses boucles dans le code) et un peu casse-tête à lancer (sous la forme d'un jar ce serais parfait).
Dans tous les cas, à garder sous la main :smile:

Mise à jour: les nouvelles versions sont maintenant sous la forme d'un jar avec une interface graphique :smile:

Activer Java pour Opera et Firefox sous Linux

, , ,

Je profite du fait que j'ai eu besoin d'activer Java pour faire un petit billet...

Déjà il vous faut le JRE : le Java Runtime Environment. C'est lui qui se chargera d'afficher les applets...
Vous pourrez le télécharger à partir du site de Sun. Personnellement j'avais le JSDK qui permet de programmer en Java et qui contient le JRE donc je n'ai pas eu à télécharger de fichiers supplémentaires.

Activer Java pour Firefox
Vous avez besoin du fichier libjavaplugin_oji.so. Vous pouvez le trouver à l'aide de la commande locate. Vous aurez peut-être à mettre la base de données de locate à jour au préalable, en lançant updatedb (en tant que root).

On est parti :
$ locate libjavaplugin_oji.so
/opt/jdk1.5.0/jre/plugin/i386/ns7/libjavaplugin_oji.so
/opt/jdk1.5.0/jre/plugin/i386/ns7-gcc29/libjavaplugin_oji.so

Il nous suffit alors de faire un lien symbolique du premier fichier vers le répertoire où se trouve les plugins de Firefox (en root) :
ln -s /opt/jdk1.5.0/jre/plugin/i386/ns7/libjavaplugin_oji.so /usr/lib/mozilla-firefox/plugins/libjavaplugin_oji.so


Voilà c'est fait !!

Activer Java pour Opera
Rien de plus simple, vous lancez Opera, vous appuyez sur la touche F12 et vous cochez 'Activer Java' :smile:
Au cas où ça ne marche pas allez dans le répertoire .opera (dans votre home) et modifiez le fichier javapath.txt
Ce dernier doit contenir le chemin du répertoire où se trouve le fichier libjava.so (utilisez locate pour le trouver)

Ben voilà c'était simple comme tout finalement p:

Allons bon !

, , ,

J'avoue que je n'avais pas touché à Java depuis un certain moment.
Hier j'ai voulu compiler un code puis javac me sort des erreurs de sémantique assez louches
Je sais bien que le code date un peu mais au point de ne pas réussir à compiler, il y a comme un problème. Je devrais normalement m'en tirer avec des avertissements comme quoi mon code est fait pour une ancienne version... sans pour autant empécher cette compilation. Est-ce possible que le compilateur soit réglé de façon très stricte ?
Je passe dans la page de manuel de javac... mais c'est quoi ces options ?
Puis je vois en haut du terminal : "jikes(1)"
De petites vérifications s'imposent. Mon javac pointe vers jikes-sablevm... Petit tour dans Synaptic : j'ai free-java-sdk
Le "free" aurait dû me mettre la puce à l'oreille, il ne s'agit effectivement pas de la vrai version de Sun mais d'une version allégée et totalement libre contrairement à la version de Sun. Je suis bon pour télécharger l'installeur sur le site de Sun... du moins si le téléchargement veut bien se lancer

Pour l'instant je suis sur le téléchargement de Cedega (j'ai trouvé un .deb ici) et j'espère que tout se passera bien.

Du côté du Windows 98, rien de nouveau. J'ai quand même fait des statistiques : on est obligé de le rebooter toutes les 1h30 car il est devenu instable (sans commentaires).

Je profite de ce billet pour poster le lien vers les thèmes FluxBox que j'ai réalisé : http://devloop.lyua.org/fluxbox/. Histoire d'en faire profiter tout le monde.