Uma medida muito importante e urgente a ser tomada o mais cedo possível ao descobrir uma vulnerabilidade de segurança é notificar a comunidade de usuários de port sobre o perigo. Essa notificação serve a dois propósitos. Primeiro, se o perigo for realmente severo, será prudente aplicar uma solução instantânea. Por exemplo, parar o serviço de rede afetado ou até mesmo desinstalar o port completamente até que a vulnerabilidade seja fechada. Segundo, muitos usuários tendem a atualizar pacotes instalados apenas ocasionalmente. Eles saberão pela notificação que eles devem atualizar o pacote o quanto antes assim que uma versão com a correção estiver disponível.
Dado o grande número de ports na árvore, um aviso de segurança não pode ser emitido em cada incidente sem criar um flood e perder a atenção do público quando se tratar de assuntos realmente sérios. Portanto, vulnerabilidades de segurança encontradas em ports são registradas no banco de dados VuXML do FreeBSD. Os membros do Security Officer Team também monitoram os problemas que requerem suas intervenções.
Committers podem eles mesmos atualizar o banco de dados VuXML, ajudar o Security Officer Team e fornecer informações cruciais para a comunidade mais rapidamente. Aqueles que não são committers ou que descobriram uma vulnerabilidade excepcionalmente severa não devem hesitar em contatar o Security Officer Team diretamente, conforme descrito na página Informações de Segurança do FreeBSD.
O banco de dados VuXML é um documento XML. Seu arquivo fonte vuln.xml
é mantido dentro do port security/vuxml. Portanto, o caminho completo do arquivo será PORTSDIR/security/vuxml/vuln.xml
. Toda vez que uma vulnerabilidade de segurança é descoberta em um port, favor adicionar uma entrada para ela nesse arquivo. Até que esteja familiarizado com o VuXML, a melhor coisa a fazer é encontrar uma entrada existente que seja parecida, depois copiá-la e usá-la como modelo.
O formato XML completo é complexo e está muito além do escopo deste livro. No entanto, para obter informações básicas sobre a estrutura de uma entrada VuXML, apenas a noção de tags é necessária. Os nomes de tags XML são colocados entre colchetes angulares. Cada abertura <tag> deve ter um fechamento correspondente </tag>. As tags podem ser aninhadas. Se aninhadas, as tags internas devem ser fechadas antes das externas. Há uma hierarquia de tags, ou seja, regras mais complexas de aninhamento. Isso é semelhante ao HTML. A principal diferença é que o XML é eXtensible, isto é, com base na definição de tags personalizadas. Devido à sua estrutura intrínseca, o XML por outro lado coloca dados amórficos de uma maneira mais organizada. O VuXML é especialmente adaptado para marcar descrições de vulnerabilidades de segurança.
Agora considere uma entrada VuXML realista:
<vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"><topic>Several vulnerabilities found in Foo</topic>
<affects> <package> <name>foo</name>
<name>foo-devel</name> <name>ja-foo</name> <range><ge>1.6</ge><lt>1.9</lt></range>
<range><ge>2.*</ge><lt>2.4_1</lt></range> <range><eq>3.0b1</eq></range> </package> <package> <name>openfoo</name>
<range><lt>1.10_7</lt></range>
<range><ge>1.2,1</ge><lt>1.3_1,1</lt></range> </package> </affects> <description> <body xmlns="http://www.w3.org/1999/xhtml"> <p>J. Random Hacker reports:</p>
<blockquote cite="http://j.r.hacker.com/advisories/1"> <p>Several issues in the Foo software may be exploited via carefully crafted QUUX requests. These requests will permit the injection of Bar code, mumble theft, and the readability of the Foo administrator account.</p> </blockquote> </body> </description> <references>
<freebsdsa>SA-10:75.foo</freebsdsa>
<freebsdpr>ports/987654</freebsdpr>
<cvename>CAN-2010-0201</cvename>
<cvename>CAN-2010-0466</cvename> <bid>96298</bid>
<certsa>CA-2010-99</certsa>
<certvu>740169</certvu>
<uscertsa>SA10-99A</uscertsa>
<uscertta>SA10-99A</uscertta>
<mlist msgid="201075606@hacker.com">http://marc.theaimsgroup.com/?l=bugtraq&m=203886607825605</mlist>
<url>http://j.r.hacker.com/advisories/1</url>
</references> <dates> <discovery>2010-05-25</discovery>
<entry>2010-07-13</entry>
<modified>2010-09-17</modified>
</dates> </vuln>
Os nomes das tags devem ser auto explicativos, por isso vamos dar uma olhada apenas nos campos que precisam ser preenchidos:
Esta é a tag de nível superior de uma entrada VuXML. Ela tem um atributo obrigatório, | |
Esta é uma descrição de uma linha do problema encontrado. | |
Os nomes dos pacotes afetados são listados nesta tag. Vários nomes podem ser fornecidos, pois vários pacotes podem ser baseados em um único master port ou produto de software. Isso pode incluir branches stable e de desenvolvimento, versões de localidade e slave ports englobando diferentes escolhas de opções importantes de configuração em build-time. Importante:É responsabilidade do submitter encontrar todos os pacotes relacionados ao escrever uma entrada VuXML. Tenha em mente que
| |
Versões afetadas de pacote(s) são especificadas com um ou mais intervalos usando uma combinação de elementos Em uma especificação de range, O exemplo acima especifica que as versões afetadas vão de | |
Vários grupos de pacotes relacionados (essencialmente, ports) podem ser listados na seção | |
Os intervalos de versão têm que incluir | |
Este é um resumo do problema. XHTML é usado neste campo. Pelo menos | |
Esta seção contém referências a documentos relevantes. Quanto mais referências aplicadas, melhor. | |
Isto é um aviso de segurança do FreeBSD. | |
Isto é um relatório de problemas do FreeBSD. | |
Isto é um identificador MITRE CVE. | |
Isto é um ID de bug do SecurityFocus. | |
Isto é um aviso de segurança US-CERT. | |
Isto é uma nota de vulnerabilidade US-CERT. | |
Isto é um alerta de Cyber Segurança US-CERT. | |
Isto é um Alerta Técnico de Cyber Segurança US-CERT. | |
Esta é uma URL para uma postagem arquivada em uma lista de discussão. O atributo | |
Esta é uma URL genérica. Apenas se nenhuma das outras categorias de referência for aplicável. | |
Esta é a data em que o problema foi divulgado ( | |
Esta é a data quando a entrada foi adicionada ( | |
Esta é a data em que qualquer informação na entrada foi modificada pela última vez ( |
Este exemplo descreve uma nova entrada para uma vulnerabilidade no pacote dropbear
que foi corrigido na versão dropbear-2013.59
.
Como pré-requisito, instale uma nova versão do port security/vuxml.
Primeiro, verifique se já existe uma entrada para esta vulnerabilidade. Se houvesse essa entrada, ela deveria corresponder com a versão anterior do pacote, 2013.58
:
%
pkg audit dropbear-2013.58
Se não houver nenhuma, adicione uma nova entrada para esta vulnerabilidade.
%
cd ${PORTSDIR}/security/vuxml
%
make newentry
Verifique sua sintaxe e formatação:
%
make validate
Pelo menos um desses pacotes precisa ser instalado:textproc/libxml2, textproc/jade.
Verifique se a seção <affected>
da entrada irá coincidir com os pacotes corretos:
%
pkg audit -f ${PORTSDIR}/security/vuxml/vuln.xml dropbear-2013.58
Certifique-se de que a entrada não produza correspondências incorretas.
Agora, verifique se as versões corretas do pacote são correspondidas pela entrada:
%
pkg audit -f ${PORTSDIR}/security/vuxml/vuln.xml dropbear-2013.58 dropbear-2013.59
dropbear-2012.58 is vulnerable: dropbear -- exposure of sensitive information, DoS CVE: CVE-2013-4434 CVE: CVE-2013-4421 WWW: http://portaudit.FreeBSD.org/8c9b48d1-3715-11e3-a624-00262d8b701d.html 1 problem(s) in the installed packages found.
A versão anterior é encontrada enquanto a última não.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.