{"id":1057,"date":"2022-02-18T20:05:11","date_gmt":"2022-02-18T23:05:11","guid":{"rendered":"http:\/\/blog.saperx.com.br\/?p=1057"},"modified":"2022-02-18T20:13:58","modified_gmt":"2022-02-18T23:13:58","slug":"sip-register","status":"publish","type":"post","link":"https:\/\/blog.saperx.com.br\/index.php\/2022\/02\/18\/sip-register\/","title":{"rendered":"SIP REGISTER"},"content":{"rendered":"\n<p>Aqui voc&ecirc; aprender&aacute; como funciona o pacote SIP REGISTER, comumente utilizado para registrar um ramal em um PABX IP.<br>Voc&ecirc; tamb&eacute;m entender&aacute; qual &eacute; a l&oacute;gica de termos um pacote REGISTER seguido de um 401 Unauthorized em cada autentica&ccedil;&atilde;o e como isso &eacute; importante para a sua seguran&ccedil;a.<\/p>\n\n\n\n<p>Tentarei ser o mais objetivo e did&aacute;tico poss&iacute;vel!<\/p>\n\n\n\n<p>Vamos l&aacute;!<\/p>\n\n\n\n<p>O registro SIP &eacute; uma das formas onde o SERVIDOR <strong>passa a conhecer o IP do CLIENTE<\/strong>.<\/p>\n\n\n\n<p>Sugiro que leia novamente a frase acima.<\/p>\n\n\n\n<p class=\"has-normal-font-size\">&Eacute; isso mesmo! <br>A principal utiliza&ccedil;&atilde;o do registro (REGISTER) &eacute; fazer com que o servidor saiba <strong>qual &eacute; o IP do ramal<\/strong> <strong>que est&aacute; ativo<\/strong>. Desta forma, o servidor conseguir&aacute; mandar uma chamada para ele, pois saber&aacute; qual &eacute; o seu IP naquele exato momento. <\/p>\n\n\n\n<p><strong>E se o IP mudar? <\/strong><br>Um novo pacote REGISTER &eacute; enviado de tempos em tempos do cliente para o servidor, visando sempre manter o servidor atualizado sobre qual &eacute; o IP do ramal. <br>Portanto, n&atilde;o tem problemas se o IP do ramal mudar. Ele pode ser din&acirc;mico e funcionar&aacute; perfeitamente bem! <s>mesmo atr&aacute;s de NAT (assunto pra outro dia)<\/s>!<\/p>\n\n\n\n<p>Quando temos IP fixo no lado do <strong>servidor<\/strong> e no lado do <strong>cliente<\/strong> a configura&ccedil;&atilde;o pode ser feita por apontamento IP &ndash; IP, e o registro passa a se tornar desnecess&aacute;rio! Geralmente essa configura&ccedil;&atilde;o &eacute; utilizada em troncos SIP entre o seu servidor e a sua operadora de telefonia.<\/p>\n\n\n\n<p>Muitas pessoas acreditam que o REGISTRO serve exclusivamente para permitir que aquele ramal fa&ccedil;a liga&ccedil;&otilde;es pelo PABX. Este conceito est&aacute; errado. Um ramal <strong>n&atilde;o<\/strong> registrado n&atilde;o<strong> receber&aacute;<\/strong> liga&ccedil;&otilde;es, pois o PABX n&atilde;o saber&aacute; qual &eacute; o seu IP, mas poder&aacute; realizar liga&ccedil;&otilde;es normalmente.<\/p>\n\n\n\n<h2>Capturando um pacote REGISTER<\/h2>\n\n\n\n<p>Primeiramente, considere o meu cen&aacute;rio:<br>Estou com um telefone IP Yealink, com IP 10.255.2.5.<br>Configurei o ramal <strong>200<\/strong> nele, registrando no IP <strong>10.255.2.22<\/strong>, com a senha <strong>MySecret<\/strong><br>Iniciei uma captura de pacotes no servidor.<\/p>\n\n\n\n<p>Veja o que capturei:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"237\" src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-1024x237.png\" alt=\"image 1024x237 - SIP REGISTER\" class=\"wp-image-1058\" srcset=\"https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-1024x237.png 1024w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-300x70.png 300w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-768x178.png 768w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-600x139.png 600w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image.png 1338w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" title=\"SIP REGISTER\"><\/figure>\n\n\n\n<p>Note que temos 4 pacotes, nesta ordem:<\/p>\n\n\n\n<ol><li>REGISTER<\/li><li>401 Unauthorized<\/li><li>REGISTER<\/li><li>200 OK<\/li><\/ol>\n\n\n\n<p>&Eacute; normal (e esperado) que muita gente se pergunte o motivo desse &ldquo;401 Unauthorized&rdquo; e ap&oacute;s um &ldquo;200 OK&rdquo;. Este procedimento faz parte do que chamamos de CHALLENGE. E serve para que a sua senha n&atilde;o trafegue em texto puro.<\/p>\n\n\n\n<p>Calma! Vou explicar em detalhes!<\/p>\n\n\n\n<p>Veja na primeira imagem acima est&aacute; mostrando o primeiro pacote REGISTER. <br>Note que dentro deste pacote <strong>n&atilde;o possui<\/strong> a sua senha em nenhum campo. <br>Como que o servidor ir&aacute; retornar um &ldquo;200 OK&rdquo;, indicando que voc&ecirc; est&aacute; autenticado, se voc&ecirc; n&atilde;o enviou a sua senha? Pois &eacute;.. ent&atilde;o &eacute; esperado o retorno &ldquo;401 Unauthorized&rdquo;.<\/p>\n\n\n\n<p>O segredo est&aacute; nos detalhes! Esta resposta do pacote <strong>401 Unauthorized<\/strong> cont&eacute;m algumas informa&ccedil;&otilde;es importantes, destacadas abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"274\" src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-3-1024x274.png\" alt=\"image 3 1024x274 - SIP REGISTER\" class=\"wp-image-1061\" srcset=\"https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-3-1024x274.png 1024w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-3-300x80.png 300w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-3-768x206.png 768w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-3-600x161.png 600w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-3.png 1169w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" title=\"SIP REGISTER\"><\/figure>\n\n\n\n<p>Aten&ccedil;&atilde;o especial na linha &ldquo;<strong>www-authenticate<\/strong>&rdquo; que o servidor enviou para o meu ramal. <\/p>\n\n\n\n<p>Basicamente ele est&aacute; dizendo: &ldquo;Voc&ecirc; n&atilde;o est&aacute; autorizado. Caso queira se autenticar aqui, me envie a sua senha criptografada com o algoritmo MD5. Adicione neste hash MD5 os valores de <em>nonce<\/em> e <em>realm<\/em>&ldquo;.<\/p>\n\n\n\n<p>Vamos ao pr&oacute;ximo pacote de REGISTER! Agora contendo a autentica&ccedil;&atilde;o:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"191\" src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-4-1024x191.png\" alt=\"image 4 1024x191 - SIP REGISTER\" class=\"wp-image-1064\" srcset=\"https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-4-1024x191.png 1024w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-4-300x56.png 300w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-4-768x143.png 768w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-4-1536x286.png 1536w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-4-600x112.png 600w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-4.png 1615w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" title=\"SIP REGISTER\"><\/figure>\n\n\n\n<p>Note que agora, diferentemente do primeiro REGISTER, temos a linha &ldquo;Authorization&rdquo;. Agora sim estamos a um passo de registrar, de fato, o ramal.<br>Veja o campo &ldquo;response&rdquo;, marcado na seta em vermelho. Este &eacute; o hash md5 da minha senha <strong>MySecret<\/strong>.<\/p>\n\n\n\n<p>E a resposta do servidor: &ldquo;200 OK&rdquo; &ndash; Autorizado!!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"309\" src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-5-1024x309.png\" alt=\"image 5 1024x309 - SIP REGISTER\" class=\"wp-image-1065\" srcset=\"https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-5-1024x309.png 1024w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-5-300x90.png 300w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-5-768x232.png 768w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-5-600x181.png 600w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-5.png 1174w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" title=\"SIP REGISTER\"><\/figure>\n\n\n\n<p>E &eacute; desta forma, que a autentica&ccedil;&atilde;o ocorre! Chave pra um lado, md5 pra outro, e voil&agrave;: 200 OK.<\/p>\n\n\n\n<p>Portanto, aprendemos que o CHALLENGE (Register -&gt; 401 -&gt; REGISTER -&gt; 200) &eacute; um procedimento correto e esperado, para garantir a sua seguran&ccedil;a na autentica&ccedil;&atilde;o do seu ramal.<\/p>\n\n\n\n<h2>Extras &ndash; Como &eacute; o c&oacute;digo por tr&aacute;s do hash MD5 do REGISTER?<\/h2>\n\n\n\n<p>Agora, se voc&ecirc; &eacute; curioso como eu, e deseja saber como &eacute; feito o hash em md5 do pacote REGISTER, essa leitura &eacute; pra voc&ecirc;.<\/p>\n\n\n\n<p>Criei um c&oacute;digo PHP simples que ir&aacute; gerar esse hash da senha. Assim facilitar&aacute; o seu entendimento e voc&ecirc; poder&aacute; ainda brincar com o c&oacute;digo. O resultado dele &eacute; este:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"317\" src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-8-1024x317.png\" alt=\"image 8 1024x317 - SIP REGISTER\" class=\"wp-image-1068\" srcset=\"https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-8-1024x317.png 1024w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-8-300x93.png 300w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-8-768x238.png 768w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-8-600x186.png 600w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-8.png 1140w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" title=\"SIP REGISTER\"><\/figure>\n\n\n\n<p>O campo &ldquo;response&rdquo;, que o seu ramal envia para o servidor, nada mais &eacute; que &ldquo;um mix&rdquo; de 03 hashes MD5. E sim,  tanto o seu ramal quanto o seu servidor ficam a todo o momento realizando hashes e mais hashes md5.<\/p>\n\n\n\n<p>Abaixo, o cora&ccedil;&atilde;o do c&oacute;digo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"405\" height=\"144\" src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-7.png\" alt=\"image 7 - SIP REGISTER\" class=\"wp-image-1067\" srcset=\"https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-7.png 405w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-7-300x107.png 300w\" sizes=\"(max-width: 405px) 100vw, 405px\" title=\"SIP REGISTER\"><\/figure>\n\n\n\n<p>Simples, n&atilde;o?<br>O resultado do $hash_3 &eacute; o seu response!<\/p>\n\n\n\n<p>Ok, ok, se voc&ecirc; chegou at&eacute; aqui, ent&atilde;o vamos aos detalhes&hellip;<\/p>\n\n\n\n<p>Primeiramente, voc&ecirc; precisar&aacute; ter as 2 informa&ccedil;&otilde;es abaixo:<\/p>\n\n\n\n<ol><li>Seu usu&aacute;rio SIP <\/li><li>Sua senha SIP<\/li><\/ol>\n\n\n\n<p>Al&eacute;m das informa&ccedil;&otilde;es acima, voc&ecirc; vai precisar coletar no pacote SIP as 3 informa&ccedil;&otilde;es abaixo (<em>s&atilde;o fornecidas pelo 401 Unauthorized<\/em>):<\/p>\n\n\n\n<ol><li>realm<\/li><li>nonce<\/li><li>uri<\/li><\/ol>\n\n\n\n<p>&Eacute; simples, veja onde elas est&atilde;o:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"265\" src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-6-1024x265.png\" alt=\"image 6 1024x265 - SIP REGISTER\" class=\"wp-image-1066\" srcset=\"https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-6-1024x265.png 1024w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-6-300x78.png 300w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-6-768x199.png 768w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-6-600x155.png 600w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-6.png 1231w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" title=\"SIP REGISTER\"><\/figure>\n\n\n\n<p><em>Obs: Note que as informa&ccedil;&otilde;es 1 e 3 s&atilde;o fornecidas pelo 401 Unauthorized. Estas s&atilde;o utilizadas para montagem do hash md5 que ser&aacute; posteriormente enviado do cliente para o servidor.<\/em><\/p>\n\n\n\n<p>Agora com estas 5 informa&ccedil;&otilde;es coletadas, basta inserir dentro do c&oacute;digo e execut&aacute;-lo. Altere as 5 primeiras vari&aacute;veis.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"488\" height=\"416\" src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-11.png\" alt=\"image 11 - SIP REGISTER\" class=\"wp-image-1071\" srcset=\"https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-11.png 488w, https:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-11-300x256.png 300w\" sizes=\"(max-width: 488px) 100vw, 488px\" title=\"SIP REGISTER\"><\/figure>\n\n\n\n<p>Segue o c&oacute;digo em texto puro:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\n\/\/Created By: Ronaldo Sacco - ronaldo@saperx.com.br\n\/\/Date: 18\/02\/2022\n\n\/\/****************************\n\/\/*Substitua os campos abaixo*\n\/\/****************************\n\n\/\/Usuario e senha SIP\n$sip_secret   = \"MySecret\";\n$sip_username = \"200\";\n\n\/\/Colete do pacote SIP:\n$sip_realm = \"saperx\";\n$sip_uri   = \"sip:10.255.2.22:5060\";\n$sip_nonce = \"197ab57f\";\n\n\/\/****************************\n\/\/*Nao precisa alterar nada daqui pra baixo\n\/\/****************************\n\n\/\/Step 01\n$hash_1 = md5(\"$sip_username:$sip_realm:$sip_secret\");\n\n\/\/Step 02\n$hash_2 = md5(\"REGISTER:\".$sip_uri);\n\n\/\/Step 03\n$hash_3 = md5(\"$hash_1:$sip_nonce:$hash_2\");\n\necho $hash_3.\"\\n\";\n\n?&gt;\n<\/code><\/pre>\n\n\n\n<p>Alterado as vari&aacute;veis, basta rodar para obter o resultado abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"http:\/\/blog.saperx.com.br\/wp-content\/uploads\/2022\/02\/image-8-1024x317.png\" alt=\"O atributo alt desta imagem est&aacute; vazio. O nome do arquivo &eacute; image-8-1024x317.png\" title=\"O atributo alt desta imagem est&aacute; vazio. O nome do arquivo &eacute; image-8-1024x317.png\"><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>E a&iacute;, matou a curiosidade? Este post foi &uacute;til para voc&ecirc;? Espero, realmente, que tenha gostado! Afinal, essa &eacute; uma d&uacute;vida de muitos clientes.<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Como funciona o pacote SIP REGISTER, CHALLENGE e MD5<\/p>\n","protected":false},"author":2,"featured_media":1076,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,5,7],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1057"}],"collection":[{"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=1057"}],"version-history":[{"count":14,"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1057\/revisions"}],"predecessor-version":[{"id":1089,"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1057\/revisions\/1089"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/media\/1076"}],"wp:attachment":[{"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=1057"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=1057"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.saperx.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=1057"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}