Fusion de données

Concevoir des flux de travail 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 à un port de l'ordinateur de destination.

Concevoir des flux de travail Machine Learning en Python

Ensemble de données cyber de 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 flux de travail Machine Learning en Python

Ensemble de données cyber de LANL

attack : information sur certaines attaques effectué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 flux de travail Machine Learning en Python

Étiqueter des événements vs des ordinateurs

Un seul événement se prête mal à l'étiquetage. Une seule transaction entre une source infectée et un ordinateur de destination.

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

Concevoir des flux de travail Machine Learning en Python

Regrouper et créer 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 flux de travail Machine Learning en Python

Regrouper et créer 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 flux de travail Machine Learning en Python

Regrouper et créer 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 flux de travail Machine Learning en Python

Ensemble 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 maintenant un ensemble 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 flux de travail Machine Learning en Python

Prêt à coincer un pirate ?

Concevoir des flux de travail Machine Learning en Python

Preparing Video For Download...