Datafusion

Att designa maskininlärningsflöden i Python

Dr. Chris Anagnostopoulos

Honorary Associate Professor

Datorer, portar och protokoll

Datatrafik skickas i paket från en port på källdatorn till en port på måldatorn.

Att designa maskininlärningsflöden i Python

LANL-cyberdataset

flows: Flöden är sessioner av kontinuerlig dataöverföring mellan en port på en källdator och en port på en måldator, enligt ett visst protokoll.

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/
Att designa maskininlärningsflöden i Python

LANL-cyberdataset

attack: information om vissa attacker som säkerhetsteamet självt genomfört under ett 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

Hur konstruerar vi märkta exempel från dessa data?

1 https://csr.lanl.gov/data/cyber1/
Att designa maskininlärningsflöden i Python

Märka händelser kontra märka datorer

Ett enskilt händelseförlopp är svårt att märka. En enskild transaktion mellan en infekterad källdator och en måldator.

Men en hel dator är antingen infekterad eller inte. En infekterad källdator försöker kommunicera med alla möjliga portar på två olika datorer.

Att designa maskininlärningsflöden i Python

Gruppera och skapa särdrag

Analysenhet = 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
Att designa maskininlärningsflöden i Python

Gruppera och skapa särdrag

Från en DataFrame per dator till en särdragsvektor per dator.

def featurize(df):
    return {
        'unique_ports': len(set(df['destination_port'])),
        'average_packet': np.mean(df['packet_count']),
        'average_duration': np.mean(df['duration'])
    }
Att designa maskininlärningsflöden i Python

Gruppera och skapa särdrag

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]
Att designa maskininlärningsflöden i Python

Märkt dataset

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

Paret (X, y) är nu ett standardiserat märkt klassificeringsdataset.

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
Att designa maskininlärningsflöden i Python

Redo att avslöja en hackare?

Att designa maskininlärningsflöden i Python

Preparing Video For Download...