Blog

Machine Learning e a Segurança da Informação

Written by Jorge Rocha | 16/out/2018 19:00:00

Antes de entrarmos no assunto de probabilidades, comportamento, álgebra linear... é muito interessante esclarecermos bem o que é "Machine Learning”.

Machine Learning nada mais é do que um nome novo para algo muito antigo; não passa de uma nova terminologia para um conjunto de equações e algoritmos baseado quase que totalmente em álgebra linear ou que define a maioria das equações de probabilidade. Por exemplo: a base da regressão Linear (muito usada em ML) foi primeiramente vislumbrada por Francis Galton em 1888.            

Após a parte indubitavelmente e academicamente chata, podemos ir para a diversão. Não importa o nome usado, os modelos estatísticos e seus algoritmos, hoje atualizados, são de grande uso na maioria das áreas de conhecimento (ousaria dizer até em todas). Especificamente na segurança da informação, seu maior uso é retirar, da grande quantidade de informação que hoje é processada, informações úteis e acionáveis.

Os modelos não lineares de classificação para feeds de segurança são os que considero mais interessantes. Porém, antes da utilização de ML, todo dado que recebemos é tratado e enriquecido para que os modelos estatísticos tenham parâmetros variados nos quais poderemos basear nossas predições.

Em casos de uso de algoritmos de Machine Learning é recomendado, sempre que possível, a utilização de stacks de algoritmos. Os dois modelos que eu faço uso são a random classification florest para primeiro estabelecer probabilidade de ser malicioso (baseado em fatores como domínio, país, origem e etc) e, depois, o clustering para agrupar essa informação em tipos de ameaça (phishing, botnet, ransomware, etc.).

Antes de começar a produzir informações, vale ressaltar que no uso de modelos estatísticos é sempre recomendado avaliar quais as features do seu data set são mais representativas. A utilização de Recursive Feature Elimination, Associantion Rules e algoritmos de redução de dimensionalidade como Principal Component Analysis são muito importantes para a saúde e precisão do seu modelo.

A escolha adequada das features é tão/ou mais importante quanto a escolha do algoritmo que você vai utilizar. Relearning e análise de desempenho também sempre devem estar no calendário de manutenção dos seus modelos. Afinal isso é learning.

Uma vez feitos esses dois modelos temos acesso a informação dos malware agrupados e (no meu caso) com uma precisão de 91% de serem maliciosos. Com isso você tem uma redução drástica da quantidade de informação e adquire informação acionável e com baixíssima probabilidade de ser falso-positivo. Você perder 9% do tempo do seu analista me soa bem razoável visto que você poderá estar atuando no incidente de forma precoce ou até mesmo antecipando o mesmo.

Isso funciona muito bem em produção se utilizar aplicações de terceiros, assim como criando seu próprio serviço como Tensorflow ou Flask. Após meses de estudo identifiquei que estabelecer esse tipo de serviço/aplicação em Python é vantajoso por três motivos:

                1 - Temos uma comunidade ativa e contributiva que pode ser de grande auxílio.

                2 - É uma linguagem hoje bem estabelecida, então se torna mais fácil ter mão de obra qualificada.

                3 - Existem diversos métodos de deploy baseados em Python - desde totalmente gratuitos até modelos mais                                     corporativos com suporte como os da Azure ou AWS.

Para concluir, modelos estáticos existem há mais de 200 anos. É uma matemática um pouco complexa, mas muito bem fundamentada. Se utilizada corretamente pode ajudar MUITO, ainda mais no mundo de hoje com as quantidades gigantescas de informação com as quais lidamos. E lembre-se: "Nunca adapte a realidade ao modelo e, sim, o modelo à realidade".