1) O documento propõe um método para representar trechos de código na Stack Overflow usando características do conteúdo do código e relacionamentos sociais; 2) O foco é na linguagem Java para Android devido à sua popularidade e número de desenvolvedores; 3) O método extrai palavras-chave do código e mapeia relacionamentos entre usuários, perguntas, respostas e códigos.
1) O documento propõe um método para representar trechos de código na Stack Overflow usando características do conteúdo do código e relacionamentos sociais; 2) O foco é na linguagem Java para Android devido à sua popularidade e número de desenvolvedores; 3) O método extrai palavras-chave do código e mapeia relacionamentos entre usuários, perguntas, respostas e códigos.
1) O documento propõe um método para representar trechos de código na Stack Overflow usando características do conteúdo do código e relacionamentos sociais; 2) O foco é na linguagem Java para Android devido à sua popularidade e número de desenvolvedores; 3) O método extrai palavras-chave do código e mapeia relacionamentos entre usuários, perguntas, respostas e códigos.
O método proposto para representar trechos de código na
Stack Overflow utiliza tanto o conteúdo do código como as
características sociais do código (reputação de utilizadores, relacionamento entre eles, etc), e como chegamos à detecção de código inseguro com base nessa representação de relacionamentos.
Na Stack Overflow pode ser partilhado código de várias
linguagens de programação diferentes, mas este trabalho foca-se na linguagem Java para desenvolvimento em Android, por ser uma das linguagens mais populares, porque dispositivos móveis têm cada vez mais utilizadores, mais que os computadores, e por haver milhões de aplicações criadas em grande parte por programadores inexperientes ou sobrecarregados devido à sua natureza open-source, e portanto que muitas vezes negligenciam a parte da segurança.
A ideia é começar por extrair o código das publicações na Stack
Overflow, que estão entre tags HTML de code, e desse código extrair palavras-chave, incluindo nomes de funções, métodos, API’s, etc, portanto uma representação do conteúdo do código.
Para além disso também consideramos as características sociais
em forma de relações, como por exemplo:
1. Verificar se uma dada questão tem algum trecho de código
incluído 2. Verificar se uma dada resposta tem algum trecho de código incluído 3. Verificar se um determinado trecho de código contém uma palavra-chave específica, que esteja relacionada com código potencialmente malicioso. 4. Verificar qual o utilizador que publicou uma determinada questão 5. Verificar qual o utilizador que publicou uma determinada resposta 6. Verificar qual a questão a que uma dada resposta responde. 7. Na Stack Overflow os utilizadores recebem reputação em forma de medalhas em função do número de respostas, verificar quais os medalhas de um dado utilizador.
Construção da Rede de Informação Heterogénea (HIN). A rede
de informação heterogénea é capaz de compor os diferentes tipos de entidades (utilizadores, medalhas, questões, respostas, código e palavras-chave) e as relações entre estes, de forma a representar os trechos de código na Stack Overflow. Para colocar isto numa linguagem máquina utilizamos o conceito de meta-path (meta-caminho), que define uma composição de relações entre entidades.
Através dos meta-caminhos conseguimos caracterizar as
relações entre diferentes trechos de código, com perspectivas diferentes dependendo do meta-caminho usado.
Por exemplo o PID 2 deduz que 2 trechos de código podem
estar relacionados porque vieram de respostas dadas pelo mesmo utilizador. Enquanto que o PID 6 deduz que 2 trechos de código podem estar relacionados porque estão incluídos nas respostas dadas por utilizadores com a mesma reputação
De forma a reduzir o elevado custo de processamento e espaço,
é proposto um modelo de rede embebida chamado snippet2vec para a aprendizagem da representação de baixo nível da rede de informação heterogénea, que faz uso da lógica de outro modelo que é o metapath2vec que contempla um só meta-caminho, mas como temos múltiplos meta-caminhos pode não ser viável e portanto foi criado o snippet2vec que introduz um algoritmo mais avançado baseado no metapath2vec mas não vou falar dele porque ainda é complexo e não se apresenta em 5 minutos. Mas resumindo, no snippet2vec dado um conjunto de diferentes esquemas de meta-caminhos é proposta uma estratégia de caminhar aleatoriamente pelos caminhos de forma a mapear o conceito palavra-contexto de um excerto de código na rede de informação heterogénea, e depois o modelo skip-gram para uma eficiente aprendizagem de representação de nodes na rede de informação heterogénea.
Dados conjuntos diferentes de esquemas de meta-caminhos,
representações de diferentes tipos de nodes (ie. Trechos de código) vão ser aprendidas com o algoritmo snippet2vec. Para agregar estas representações diferentes é construído um classificador multi-view fusion (fusão de multiplas vistas) para aprender a importância destas representações e portanto fazer previsões (se são inseguras ou não).