Fusion de données

Concevoir des workflows de Machine Learning en Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Ordinateurs, ports et protocoles

Le trafic informatique est envoyé en paquets d'un port de l'ordinateur source vers un port de l'ordinateur de destination.

Concevoir des workflows de Machine Learning en Python

Jeu de données cyber de la LANL

flows : les flux sont des sessions de transfert continu de données entre un port d'un ordinateur source et un port d'un ordinateur de destination, selon un protocole donné.

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/
Concevoir des workflows de Machine Learning en Python

Jeu de données cyber de la LANL

attack : informations sur certaines attaques réalisées par l'équipe de sécurité elle‑même lors d'un test.

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

Comment créer des exemples étiquetés à partir de ces données ?

1 https://csr.lanl.gov/data/cyber1/
Concevoir des workflows de Machine Learning en Python

Étiqueter des événements vs. étiqueter des ordinateurs

Un seul événement est difficile à étiqueter. Une seule transaction entre une source infectée et un ordinateur de destination.

En revanche, un ordinateur est soit infecté, soit non. Une source infectée tente de communiquer avec tous les ports possibles sur deux ordinateurs différents.

Concevoir des workflows de Machine Learning en Python

Grouper et vectoriser des caractéristiques

Unité d'analyse = 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
Concevoir des workflows de Machine Learning en Python

Grouper et vectoriser des caractéristiques

D'un DataFrame par ordinateur à un vecteur de caractéristiques par ordinateur.

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

Grouper et vectoriser des caractéristiques

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]
Concevoir des workflows de Machine Learning en Python

Jeu de données étiqueté

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

La paire (X, y) est désormais un jeu de données de classification étiqueté standard.

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
Concevoir des workflows de Machine Learning en Python

Prêt à coincer un hacker ?

Concevoir des workflows de Machine Learning en Python

Preparing Video For Download...