Fusão de dados

Projetando Workflows de Machine Learning em Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Computadores, portas e protocolos

O tráfego de computador é enviado em pacotes de uma porta do computador de origem para outra porta no computador de destino.

Projetando Workflows de Machine Learning em Python

O conjunto de dados cibernéticos LANL

flows: Fluxos são sessões de transferência contínua de dados entre uma porta de um computador de origem e uma porta de um computador de destino, seguindo um protocolo.

flows.iloc[1]
time                    471692
duration                     0
source_computer          C5808
source_port              N2414
destination_computer    C26871
destination_port        N19148
protocol                     6
packet_count                 1
byte_count                  60
1 https://csr.lanl.gov/data/cyber1/
Projetando Workflows de Machine Learning em Python

O conjunto de dados cibernéticos LANL

attack: informações sobre certos ataques realizados pela própria equipe de segurança durante um teste.

attacks.head()
     time user@domain source_computer destination_computer
0  151036   U748@DOM1          C17693                 C305
1  151648   U748@DOM1          C17693                 C728
2  151993  U6115@DOM1          C17693                C1173
3  153792   U636@DOM1          C17693                 C294
4  155219   U748@DOM1          C17693                C5693

"Como podemos construir exemplos rotulados a partir desses dados?"

1 https://csr.lanl.gov/data/cyber1/
Projetando Workflows de Machine Learning em Python

Rotular eventos versus rotular computadores

Um único evento não pode ser rotulado facilmente. Uma única transação entre uma origem infectada e um computador de destino.

Mas um computador inteiro está infectado ou não. Uma origem infectada tenta se comunicar com todas as portas possíveis em dois computadores diferentes.

Projetando Workflows de Machine Learning em Python

Agrupar e extrair features

Unidade de análise = destination_computer

flows_grouped = flows.groupby('destination_computer')

list(flows_grouped)[0]
('C10047',         
        time  duration    ...     packet_count byte_count
2791  471694         0    ...               12       6988
2792  471694         0    ...                1        193
...
2846  471694        38    ...              157      84120
Projetando Workflows de Machine Learning em Python

Agrupar e extrair features

De um DataFrame por computador para um vetor de features por computador.

def featurize(df):
    return {
        'unique_ports': len(set(df['destination_port'])),
        'average_packet': np.mean(df['packet_count']),
        'average_duration': np.mean(df['duration'])
    }
Projetando Workflows de Machine Learning em Python

Agrupar e extrair features

out = flows.groupby('destination_computer').apply(featurize)
X = pd.DataFrame(list(out), index=out.index)

X.head()
                      average_duration      ...       unique_ports
destination_computer                        ...                   
C10047                        7.538462      ...                 13
C10054                        0.000000      ...                  1
C10131                       55.000000      ...                  1
...
[5 rows x 3 columns]
Projetando Workflows de Machine Learning em Python

Conjunto de dados rotulado

bads = set(attacks['source_computer'].append(attacks['destination_computer']))
y = [x in bads for x in X.index]

O par (X, y) agora é um conjunto de dados rotulado padrão para classificação.

X_train, X_test, y_train, y_test = train_test_split(X, y)
clf = AdaBoostClassifier()
accuracy_score(y_test, clf.fit(X_train, y_train).predict(X_test))
0.92
Projetando Workflows de Machine Learning em Python

Pronto para pegar um hacker?

Projetando Workflows de Machine Learning em Python

Preparing Video For Download...