Lasso Regression in R Called by F#

A lasso regression analysis was conducted to identify a subset of variables from a pool of 6 quantitative predictor variables that best predicted a quantitative response variable measuring the number of people employed. Quantitative predictor variables include Gross National Product (GNP), GNP implicit price deflator (1954=100), number of unemployed, number of people in the armed forces, ‘noninstitutionalized’ population ≥ 14 years of age, and the year (time).

Because of the small size of the data set (N=16), data were not split into training and test sets.

Of the 6 predictor variables, only 2 were retained in the selected model. During the estimation process, year and GNP were most strongly associated with number of people employed. The final model accounted for 97.4% of the variance in the response variable.

Figure 1. Change in the coefficients at each step

Lasso Coefficients

Source code in F#:

#load "packages/FsLab/FsLab.fsx"

open RDotNet
open RProvider
open RProvider.lars
open RProvider.datasets
open RProvider.graphics
open Deedle

let longley : Frame = R.longley.GetValue()
let longY = longley?Employed
let longX = R.as_matrix(longley.Columns.[ ["GNP.deflator"; "GNP"; "Unemployed"; "Armed.Forces"; "Population"; "Year"] ])
let fit = R.lars(x=longX, y=longY)
R.summary fit
R.plot fit

Which created the following output:

Call:
lars::lars(x = fsr_9628_42, y = fsr_9628_43)
R-squared: 0.995 
Sequence of LASSO moves:
     GNP Unemployed Armed.Forces Year GNP Population GNP.deflator GNP GNP.deflator GNP.deflator
Var    2          3            4    6  -2          5            1   2           -1            1
Step   1          2            3    4   5          6            7   8            9           10

LARS/LASSO
Call: lars::lars(x = fsr_9628_42, y = fsr_9628_43)
   Df     Rss        Cp
0   1 185.009 1976.7120
1   2   6.642   59.4712
2   3   3.883   31.7832
3   4   3.468   29.3165
4   5   1.563   10.8183
5   4   1.339    6.4068
6   5   1.024    5.0186
7   6   0.998    6.7388
8   7   0.907    7.7615
9   6   0.847    5.1128
10  7   0.836    7.0000

Random Forest in R Called by F#

Random forest analysis was performed to evaluate the importance of a series of explanatory variables in predicting a binary, categorical response variable. The following explanatory variables were included as possible contributors to a random forest evaluating after surgery deformation (kyphosis) (my response variable), age in months (Age), number of vertebrae involved (Number), and the highest vertebrae operated on (Start).

The accuracy of the random forest was 80%, with the subsequent growing of multiple trees rather than a single tree, adding little to the overall accuracy of the model, and suggesting that interpretation of a single decision tree may be appropriate.

Source code in F#:

#I "../packages/RProvider.1.1.15"
#load @"..\packages\RProvider.1.1.15\RProvider.fsx"

open RDotNet
open RProvider
open RProvider.rpart
open RProvider.randomForest

let fit = namedParams [ "x", box kyphoX; "y", box kyphoY ] |> R.randomForest
R.print fit

Which created the following output:

               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 1

        OOB estimate of  error rate: 19.75%
Confusion matrix:
        absent present class.error
absent      60       4   0.0625000
present     12       5   0.7058824

COBIT 5 Kurzüberblick

“Wenn ich weiter sehen konnte, so deshalb, weil ich auf den Schultern von Riesen stand.” (Isaac Newton)

Was ist COBIT?
COBIT ist das weltweit führende Framework für IT-Governance und wird von 95% der internationalen Großunternehmen (u.a. Generali Italien) vollständig oder teilweise umgesetzt. COBIT erhebt den Anspruch, das Bindeglied zwischen den unternehmensweiten Steuerungs-Frameworks und den IT-spezifischen Modellen (z.B. ITIL, ISO 27001/27002) zu sein. Das Ziel von COBIT ist, die Integration der IT-Governance in die Corporate Governance zu gewährleisten.

COBIT wird seit 1993 vom internationalen Verband der IT-Prüfer (Information Systems Audit and Control Association, ISACA) kontinuierlich weiterentwickelt und neuesten Erkenntnissen angepasst.

COBIT Version 5 integriert zahlreiche anerkannte und bedeutende Frameworks, Standards und Ressourcen wie COBIT 4.1, Val IT, Risk IT, ITIL und relevante ISO-Standards.

Warum COBIT?
COBIT 5 hilft Unternehmen, einen optimalen IT-Wert zu generieren, indem diese für ein ausgeglichenes Verhältnis zwischen der Nutzenrealisierung, der Optimierung von Risiko und der Nutzung von Ressourcen sorgen.

COBIT 5 auf einen Blick
COBIT 5 stellt ein umfassendes Rahmenwerk bereit, das Unternehmen dabei unterstützt, ihre Ziele im Rahmen der Governance und des Managements der Unternehmens-IT zu erreichen. COBIT 5 ermöglicht eine ganzheitliche Governance und ein ganzheitliches Management der IT für das gesamte Unternehmen. Dabei werden alle funktionalen Zuständigkeitsbereiche von Unternehmen und IT lückenlos integriert und die IT-bezogenen Interessen interner und externer Anspruchsgruppen (Stakeholder) berücksichtigt. COBIT 5 ist ein generischer und anpassbarer Ansatz und damit für Unternehmen aller Größen geeignet.

Prinzipien
COBIT 5 definiert fünf grundlegende Prinzipien für die Governance und das Management der Unternehmens-IT. Eines der wesentlichen Prinzipien ist die Unterscheidung zwischen Governance (also der Vorgabe der Richtung, Priorisierung und Festlegung der Unternehmensziele) und Management (der Planung, Implementierung, Durchführung und Überwachung der dafür notwendigen Aktivitäten). Zwei weitere wesentliche Prinzipien sind der umfassende, ganzheitliche Ansatz sowie die Abdeckung des gesamten Unternehmens.

Gemeinsam ermöglichen diese fünf Prinzipien dem Unternehmen einen wirksamen Rahmen für Governance und Management zu schaffen, mit dessen Hilfe die Investitionen in Informationen und Technologie und deren Nutzen zum Vorteil der Stakeholder optimiert werden können.

Zielkaskade
Unternehmen haben die Aufgabe, einen Wert für ihre Stakeholder (z.B. Kunden, Lieferanten, Gesetzgeber oder Fachbereiche) zu schaffen, indem sie ein ausgewogenes Verhältnis zwischen der Nutzenrealisierung, der Optimierung von Risiken und der Nutzung von Ressourcen herstellen. COBIT 5 stellt sämtliche Prozesse und sonstige Enabler bereit, die erforderlich sind, um die Wertschöpfung durch den Einsatz von IT zu unterstützen. Ziel ist es, die bei jedem Unternehmen unterschiedlichen Anforderungen und Bedürfnisse der Stakeholder in eine durchführbare Unternehmensstrategie umzuwandeln. Hierfür sieht COBIT 5 eine Zielkaskade vor, ein Mechanismus welcher die Anforderungen der Stakeholder in Unternehmensziele, IT-bezogene Ziele und schließlich Enabler-Ziele (konkrete Prozesse und Praktiken) herunterbricht.

Ist ITIL mit COBIT kompatibel?
ITIL (und auch ISO 2700x) und COBIT ergänzen einander. ITIL und ISO 2700x definieren vorrangig wie Anforderungen umzusetzen sind, COBIT definiert primär was umzusetzen ist. COBIT befindet sich somit auf einer höheren Ebene. Stark vereinfacht ausgedrückt sind ITIL und ISO 2700x operativ und taktisch, während COBIT strategisch ist.

Zusammenfassung
COBIT 5 ist DAS Rahmenwerk für Governance und Management der Unternehmens-IT. Es integriert ein Best-of Frameworks und Standards und ermöglicht es somit, auf den Schultern von Riesen zu stehen und die IT-Governance auf ein weltweit anerkanntes Top-Level zu heben.

Decision Tree in R Called by F#

Figure 1. Classification tree (N=81) to predict a type of deformation (kyphosis) after surgery (target variable)

Classification Tree Kyphosis

Decision tree analysis was performed to test nonlinear relationships among a series of explanatory variables and a binary, categorical response variable. All possible separations (categorical) or cut points (quantitative) are tested. For the present analyses, the entropy “goodness of split” criterion was used to grow the tree and a cost complexity algorithm was used for pruning the full tree into a final subtree.

The following explanatory variables were included as possible contributors to a classification tree model evaluating after surgery deformation (kyphosis) (my response variable), age in months (Age), number of vertebrae involved (Number), and the highest vertebrae operated on (Start).

The Start variable was the first variable to separate the sample into two subgroups. Patients with a Start value less than 8.5 were more likely to have received kyphosis compared to patients not meeting this cutoff (57.9% vs. 9.7%).

Of the patients with Start value less than 8.5, a further subdivision was made with the Start variable. Patients with a Start value greater than or equal to 14.5 were less likely to have experienced kyphosis. Patients with a Start value less than 14.5 were more likely to have experienced kyphosis. The total model classified 84% of the sample correctly, 88% of kyphosis-affected (sensitivity) and 83% of non-affected (specificity).

Source code in F#:

#I "../packages/RProvider.1.1.15"
#load @"..\packages\RProvider.1.1.15\RProvider.fsx"

open RDotNet
open RProvider
open RProvider.graphics
open RProvider.rpart

let kypho = R.kyphosis.AsDataFrame()
let fit = R.rpart(formula="Kyphosis ~ Age + Number + Start", method="class", data=kypho)
namedParams [ "x", box fit; "uniform", box true; "main", box "Classification Tree for Kyphosis" ] |> R.plot
namedParams [ "x", box fit; "use.n", box true; "all", box true; "cex", box 0.8 ] |> R.text

AI Planning for Cyber Security

A very interesting application of classical Artificial Intelligence (AI) planning in the field of cyber security is the Behavioral Adversary Modeling System (BAMS) developed by Mark Boddy, Johnathan Gohde, Tom Haigh and Steven Harp.

The domain is computer network vulnerability analysis and the purpose of the system is to automatically generate an inside attacker’s course of action leading from various initial states to an attacker’s goal. The users of the system (i.e., computer network administrators) can use these attack plans to analyze vulnerabilities and to select the most reasonable and cost-effective defensive measures for their networks.

The attack plans contain 20 to 50 atomic steps each and are generated within seconds. The plan generator is a classical forward heuristic planner, in this specific case the Metric-FF planner which offers two different search modes, enhanced hill climbing and best first search.

The planning domain and the planning problem are both respresented in PDDL (Planning Domain Definition Language). The model contains many objects (e.g., computers, switches, programs, files, cryptographic keys, people, doors) and predicates (e.g., configuration of hosts, knowledge of people, status of files) to represent a computational environment. Actions change the computational environment and allow the attacker to reach her goal. Here is an example of an action which modifies the access control list for a document by giving read access for a group:

    (:action DMS_ADD_GROUP_ALLOW
      :parameters ( ?admin - c_human
        ?chost - c_host
        ?shost - c_host
        ?doc - c_file
        ?gid - c_gid )
      :precondition
        (and (pmode free)
        (nes_admin_connected ?chost ?shost)
        (at_host ?admin ?chost)
        (insider ?admin))
      :effect
        (and
        (dmsacl_read ?doc ?gid)))

The goal in this example is that Bob gets to know some secret information while keeping his detection risk low:

    (:goal (knows bob secret_info))
    (:metric minimize (detection_risk))

The PDDL domain and problem specifications are given as input to the planner, which automatically generates an attacking plan like the following:

    0 : ADAM sits down at BIGFOOT
    1 : ADAM enters ADAM_UID as user name for login on host BIGFOOT
    2 : ADAM enters password ADAM_PWD for login at host BIGFOOT
    3 : Shell B_WEXPLORE is launched on host BIGFOOT for user ADAM_UID
    4 : Program WEXPLORER on host BIGFOOT forks a child process
    5 : Contents of file B_IEXPLORE begin executing as uid ADAM_UID on host BIGFOOT
    6 : BOB sits down at YETI
    7 : BOB enters BOB_UID as user name for login on host YETI
    8 : BOB enters password BOB_PWD for login at host YETI
    9 : Shell Y_WEXPLORE is launched on host YETI for user BOB_UID
    10 : Program WEXPLORER on host YETI forks a child process
    11 : Contents of file Y_ETHEREAL begin executing as uid BOB_UID on host YETI
    12 : ETHEREAL starts sniffing the networks on YETI
    13 : ADAM logs onto dms admin server EVEREST from BIGFOOT
    14 : BOB reads the sniffer thus learning NES_ADMIN_PASS
    15 : Program WEXPLORER on host YETI forks a child process
    16 : Contents of file Y_IEXPLORE begin executing as uid BOB_UID on host YETI
    17 : BOB logs onto dms admin server EVEREST from YETI
    18 : DMS session DMSS1 has begun
    19 : BOB begins a DMS session on YETI
    20 : Connect DMS session DMSS1 to server NES on EVEREST
    21 : A route from YETI to DMS server EVEREST exists
    22 : BOB enters password BOB_DMS_PWD for the DMS session.
    23 : Authenticate BOB_UID in dms session DMSS1 with EVEREST using BOB_DMS_PWD
    24 : BOB adds an acl to allow read access of E_SECRET_DOC to the EAST_GID group
    25 : BOB begins a DMS request at YETI in session DMSS1
    26 : Document E_SECRET_DOC is requested in session DMSS1
    27 : Document E_SECRET_DOC is sent and displayed on YETI in session DMSS1
    28 : BOB reads E_SECRET_DOC and learns SECRET_INFO

Even though the number of objects, propositions and actions is very limited in this system, it is still a very interesting proof of concept for the usage of artificial intelligence planning in the information security domain. Future work could also include a notion of uncertainty in the plan (i.e., probabilistic planning).

References
Boddy, M.; Gohde, J.; Haigh, T.; and Harp, S.: Course of Action Generation for Cyber Security Using Classical Planning. In: Proceedings of ICAPS, 2005.

KI und Data Science in der Informationssicherheit

„[Unternehmen] müssen besser in Netzwerken kooperieren, viel mehr Informationen über Hackerattacken austauschen und dabei voneinander lernen. […] Das Rennen mit den Hackern um die ausgefeilteste Technik wird nie zu Ende sein, bei diesem Thema wird man sich nicht mehr zurücklehnen können.“ (Nadav Zafrir, ehem. General und Gründer des Cyberkommandos der israelischen Armee)

„Ohne das Wissen von Wettbewerbern, Wissenschaftlern und die Erkenntnis von Regierungen kann man der Bedrohung nicht mehr begegnen.“ (Avi Hasson, Chefwissenschaftler der israelischen Regierung)

Herkömmliche Sicherheitskonzepte wie Firewalls und Intrusion Prevention Systeme bieten nicht mehr den nötigen Schutz vor den neuesten Angriffstechniken. Dies ist der Grund, warum immer wieder auch namhafte Unternehmen Cyberangriffen zum Opfer fallen. Die Folgen sind Datendiebstahl, finanzielle Verluste und Beeinträchtigungen der Marke.

Wie können KI und Data Science helfen, diese Sicherheitsprobleme zu lösen?
Alle in den obigen Zitaten hervorgehobenen Wörter sind anerkannte Stärken von Methoden der Künstlichen Intelligenz (KI) und belegen eindrücklich, dass diese moderne Technologie für die Zukunft der Informationssicherheit hervorragend geeignet ist.

Maschinenlernen kann beispielsweise für folgende Aufgaben eingesetzt werden:
• Missbrauchs- und Betrugserkennung
• Anomalienerkennung
• Hybride Intrusion Detection Systeme
• Scanerkennung
• Profilerstellung des Netzwerkverkehrs

Sicherheitsarchitektur der Zukunft = verbundene Plattformen + Big Data + KI
Das Ziel von Big Data Analysen ist es, geeignete Erkenntnisse in Echtzeit zu gewinnen, damit bei Sicherheitsvorfällen sofort entsprechende Antworten gesetzt werden können, abhängig von den jeweiligen Angriffsindikatoren. Data Science Verfahren können die benötigte Zeit für Konsolidierung, Korrelationen und Verknüpfung von verschiedenen Sicherheitsinformationen (insbesondere auch historische Langzeitdaten für forensische Zwecke) drastisch reduzieren.

Neue Big Data Technologien wie Hadoop-ähnliche Datenbanken und Stromverarbeitung ermöglichen die Speicherung und Analyse von großen, verschiedenartigen Datenmengen in nicht dagewesener Geschwindigkeit und Umfang. Diese Technologien werden
• Daten aus vielen internen und externen Quellen (z.B. Schwachstellendatenbanken) in massivem Umfang sammeln,
• tiefere Analysen der Daten durchführen,
• eine zusammengefasste Ansicht von sicherheitsrelevanten Informationen anbieten, und
• die Echtzeitanalyse von Stromdaten ermöglichen.

Mehrfache Verwendung eines One-Time-Pads

In diesem Artikel soll dargestellt werden, wie sich die mehrfache Verwendung desselben Schlüssels auf die Sicherheit eines One-Time-Pads auswirkt.

Das One-Time-Pad

Das One-Time-Pad (OTP) ist ein einfaches Verschlüsselungsverfahren, das perfekte Sicherheit bietet und nicht gebrochen werden kann, auch nicht mit der gesamten weltweiten Rechenkraft. Perfekte Sicherheit bedeutet, dass der Geheimtext keine zusätzlichen Informationen über den Klartext liefert. (Es erfüllt auch das Shannon Theorem, das besagt, dass der Schlüsselraum größer oder gleich dem Nachrichtenraum sein muss.)

Der Schlüssel beim One-Time-Pad weist die gleiche Länge wie der Klartext auf. Der Schlüssel muss absolut zufällig generiert worden sein (normale Zufallszahlengeneratoren sind hierfür nicht ausreichend). Der Schlüssel muss geheim bleiben (nur Sender und Empfänger dürfen ihn kennen) und darf nie (auch nicht teilweise) wiederverwendet werden. Nach dem Einsatz muss der Schlüssel sicher vernichtet werden.

Beim Verschlüsseln wird der Klartext mit dem Schlüssel (der die gleiche Länge wie der Klartext besitzt) Exklusiv-Oder-verknüpft (XOR) und ergibt den Geheimtext. Dieser Geheimtext wird dem Empfänger übermittelt. Zum Entschlüsseln nimmt der Empfänger den erhaltenen Geheimtext und verknüpft ihn per Exklusiv-Oder (XOR) mit dem Schlüssel. Der Empfänger erhält so den Klartext.

Mehrfache Verwendung des Schlüssels

Im nachfolgenden Beispiel wird gezeigt, wie sich die mehrfache Verwendung eines Schlüssels katastrophal auf die Sicherheit auswirkt und wie so eine Verschlüsselung gebrochen werden kann. Dabei ist der Klartext der 14 Nachrichten ein um Umlaute reduzierter Auszug aus Faust I von Johann Wolfgang von Goethe:

  1. So gib mir auch die Zeiten wieder,
  2. Da ich noch selbst im Werden war,
  3. Da sich ein Quell gedrangter Lieder
  4. Ununterbrochen neu gebar,
  5. Da Nebel mir die Welt verhullten,
  6. Die Knospe Wunder noch versprach,
  7. Da ich die tausend Blumen brach,
  8. Die alle Taler reichlich fullten.
  9. Ich hatte nichts und doch genug:
  10. Den Drang nach Wahrheit und die Lust am Trug.
  11. Gib ungebandigt jene Triebe,
  12. Das tiefe, schmerzenvolle Gluck,
  13. Des Hasses Kraft, die Macht der Liebe,
  14. Gib meine Jugend mir zuruck!

Jede Zeile ist dabei eine unabhängige Nachricht, die jeweils mit demselben Schlüssel codiert wurde.

Dies ist der Schlüssel in Hexadezimaldarstellung (er ist 45 Bytes lang, genauso lang wie Nachricht 10, die längste der 14 Nachrichten):

07 05 B6 2E E1 D4 7F 89 8F D7 02 C1 64 BD E6 FF ED 77 6C 1E E2 07 8E 77 E8 91 59 A9 FE 68 51 95 BF F3 13 4E 0A A1 B0 1E 89 FA 14 11 F7

Zur Verschlüsselung werden alle 14 Nachrichten mit dem gleichen Schlüssel Exklusiv-Oder-verknüpft (XOR, ⊕): ci = mi ⊕ k, für i = 1, 2, …, 14. ci ist der Geheimtext mit der Nummer i, mi ist der Klartext mit der Nummer i, k ist der Schlüssel.

Das Ergebnis sind folgende Geheimtexte:

  1. 54 6A 96 49 88 B6 5F E4 E6 A5 22 A0 11 DE 8E DF 89 1E 09 3E B8 62 E7 03 8D FF 79 DE 97 0D 35 F0 CD DF
  2. 43 64 96 47 82 BC 5F E7 E0 B4 6A E1 17 D8 8A 9D 9E 03 4C 77 8F 27 D9 12 9A F5 3C C7 DE 1F 30 E7 93
  3. 43 64 96 5D 88 B7 17 A9 EA BE 6C E1 35 C8 83 93 81 57 0B 7B 86 75 EF 19 8F E5 3C DB DE 24 38 F0 DB 96 61
  4. 52 6B C3 40 95 B1 0D EB FD B8 61 A9 01 D3 C6 91 88 02 4C 79 87 65 EF 05 C4
  5. 43 64 96 60 84 B6 1A E5 AF BA 6B B3 44 D9 8F 9A CD 20 09 72 96 27 F8 12 9A F9 2C C5 92 1C 34 FB 93
  6. 43 6C D3 0E AA BA 10 FA FF B2 22 96 11 D3 82 9A 9F 57 02 71 81 6F AE 01 8D E3 2A D9 8C 09 32 FD 93
  7. 43 64 96 47 82 BC 5F ED E6 B2 22 B5 05 C8 95 9A 83 13 4C 5C 8E 72 E3 12 86 B1 3B DB 9F 0B 39 B9
  8. 43 6C D3 0E 80 B8 13 EC AF 83 63 AD 01 CF C6 8D 88 1E 0F 76 8E 6E ED 1F C8 F7 2C C5 92 1C 34 FB 91
  9. 4E 66 DE 0E 89 B5 0B FD EA F7 6C A8 07 D5 92 8C CD 02 02 7A C2 63 E1 14 80 B1 3E CC 90 1D 36 AF
  10. 43 60 D8 0E A5 A6 1E E7 E8 F7 6C A0 07 D5 C6 A8 8C 1F 1E 76 87 6E FA 57 9D FF 3D 89 9A 01 34 B5 F3 86 60 3A 2A C0 DD 3E DD 88 61 76 D9
  11. 40 6C D4 0E 94 BA 18 EC ED B6 6C A5 0D DA 92 DF 87 12 02 7B C2 53 FC 1E 8D F3 3C 85
  12. 43 64 C5 0E 95 BD 1A EF EA FB 22 B2 07 D5 8B 9A 9F 0D 09 70 94 68 E2 1B 8D B1 1E C5 8B B 3A B9
  13. 43 60 C5 0E A9 B5 0C FA EA A4 22 8A 16 DC 80 8B C1 57 08 77 87 27 C3 16 8B F9 2D 89 9A 0D 23 B5 F3 9A 76 2C 6F 8D
  14. 40 6C D4 0E 8C B1 16 E7 EA F7 48 B4 03 D8 88 9B CD 1A 05 6C C2 7D FB 5 9D F2 32 88

Schon ein erster kurzer Blick auf die 14 Geheimtexte verrät einem Kryptoanalysten zahlreiche Informationen.

rot: Hier handelt es sich viermal um dasselbe Wort oder den selben Wortteil. Da das Wort am Satzanfang steht, ist das erste Zeichen wahrscheinlich ein Großbuchstabe, vermutlich ein D oder S. Jedoch folgen nach dem Wort insgesamt drei verschiedene Zeichen (47, 5D, 60), so dass das Zeichen 96 vermutlich ein Leerzeichen ist.
grün: In 8 von 14 Sätzen erscheint dieses Zeichen an dieser Stelle. Höchstwahrscheinlich handelt es sich um ein Leerzeichen oder den Buchstaben e (siehe Liste der häufigsten Buchstaben).
blau: In 5 von 14 Sätzen erscheint dieses Zeichen an dieser Stelle. Höchstwahrscheinlich handelt es sich um ein Leerzeichen oder den Buchstaben e (siehe Liste der häufigsten Buchstaben).
rosa: Hier handelt es sich um dasselbe Wort oder den selben Wortteil.

Weiters kann man davon ausgehen, dass am Beginn einer Nachricht immer ein Großbuchstabe und am Ende einer Nachricht ein Satzzeichen steht.

In Phase 2 der Kryptoanalyse, macht sich der Angreifer die mathematische Tatsache zu Nutze, dass ci ⊕ cj = (mi ⊕ k) ⊕ (mj ⊕ k) = (mi ⊕ mj) ⊕ (k ⊕ k) = mi ⊕ mj.

Beispielsweise nimmt er das 0E, von dem er annimmt, dass es sich um ein Leerzeichen handelt, und XOR-verknüpft es mit 49 aus dem ersten Geheimtext an der gleichen Position 4. 0E ⊕ 49 = 47. Der ASCII-Code für das Leerzeichen ist 20 und dieses XOR-verknüpft er mit 47: 47 ⊕ 20 = 67. 67 ist der ASCII-Code für das Zeichen g, was auch korrekt ist, wenn wir im Original-Klartext weiter oben nachsehen. Diesen Vorgang wiederholt er für die anderen Zeichen.

Auch kann der Angreifer versuchen, analog wie oben statt nur eines Zeichens die häufigsten Wörter der deutschen Sprache an beliebiger Stelle einzusetzen und dann zu prüfen, ob der andere Geheimtext an derselben Stelle einen Sinn ergibt. Falls nicht, rückt er eine Position weiter und versucht dasselbe erneut. Zum Beispiel die Artikel ” der “, ” die ” und ” das ” haben eine Länge von fünf Zeichen (jeweils mit Leerzeichen vor und nach dem Wort). Wenn er die korrekte Position eines Artikels findet, erhält er gleich fünf Zeichen des anderen Klartextes. Damit kann er oftmals weitere Teile vor und nach dieser Zeichengruppe erraten. Diese neuen Zeichen kann er nun wiederum mit anderen Geheimtexten per Exklusiv-Oder verknüpfen und erhält dann wieder neue Zeichen oder Zeichengruppen. Es ist nur eine Frage der Zeit, bis der Angreifer alle 14 Nachrichten im Klartext in seinen Händen hält.

Bereits an diesem sehr einfachen Beispiel kann man sehen, dass die Kryptoanalyse ein iterativer und langwieriger Prozess ist, der viel Genauigkeit und Fleiß erfordert.

In der Praxis

Dieses Beispiel sollte in erster Linie verdeutlichen, dass der Schlüssel eines One-Time-Pads niemals (auch nicht teilweise!) wiederverwendet werden darf. Der Schlüssel muss sofort nach der Verwendung sicher und spurlos vernichtet werden. Wird diese Regel eingehalten und wird der Schlüssel absolut zufällig erzeugt, dann bietet das One-Time-Pad perfekte Sicherheit und kann nicht gebrochen werden.

In der Vergangenheit wurde aber genau dieser Fehler bereits mehrfach begangen. Ein bekanntes Beispiel sind die Lorenz-Verschlüsselungsmaschinen aus dem Zweiten Weltkrieg. Hier wurde von den Deutschen eine verschlüsselte Nachricht gesendet, die beim Empfänger jedoch nicht fehlerfrei angekommen ist, und sie wurde ein zweites Mal mit demselben Schlüssel chiffriert versendet. Jedoch hat der Schreiber aus Bequemlichkeit beim zweiten Mal einige Abkürzungen verwendet (z.B. Nr. statt Nummer) und dadurch wurde der Text verändert. Die Briten konnten beide Geheimtexte abfangen und anhand dieser Texte den Chiffriercode knacken und die Maschine sogar nachbauen.

Ein weiteres bekanntes historisches Beispiel ist das Venona-Projekt aus dem Kalten Krieg.

Das Padding-Orakel

Das Padding-Orakel wird für einen Seitenkanalangriff verwendet, bei dem der Geheimtext vollständig entschlüsselt werden kann. Funktionsweise, Angriff und Abwehr werden in diesem Artikel anhand eines konkreten Beispiels verständlich dargestellt.

Was ist Padding?

Blockchiffre-Verfahren wie AES und 3DES arbeiten mit einer bestimmen Blockgröße. Beispielsweise beträgt die Blockgröße bei AES 128 Bit und bei 3DES 64 Bit. Zu verschlüsselnde Nachrichten werden dabei in mehrere Blöcke aufgeteilt und jeder Block wird dann einzeln verschlüsselt. Wenn der letzte Block einer Nachricht nun kürzer ist als die jeweilige Blockgröße des Chiffrierers, so muss die Lücke aufgefüllt werden, damit der gesamte Block verschlüsselt werden kann. Dieses Auffüllen nennt man Padding. Auch wenn eine Nachricht oder der letzte Block einer Nachricht genauso lang ist wie die Blockgröße, findet ein Padding statt. Es wird dann einfach ein neuer vollständiger Block an die Nachricht als Padding angehängt. Ein Padding findet also unabhängig von der Nachrichtenlänge grundsätzlich immer statt. (Es gibt Methoden wie Ciphertext Stealing und den CTR-Modus von Blockchiffrierern, die ein Padding überflüssig machen. Die meisten Verschlüsselungsanwendungen in der Praxis arbeiten jedoch im CBC-Modus mit Padding wie in diesem Artikel beschrieben.)

Welche Padding-Methoden gibt es?

Beim Padding nach dem ANSI X.923 Standard werden die fehlenden Bytes mit Nullwerten (0) aufgefüllt und das letzte Byte enthält die Gesamtlänge des Paddings. Bei einer Blocklänge von acht Bytes (64 Bits) ergibt sich folgendes Beispiel, wenn der letzte Block mit vier Bytes aufgefüllt werden muss:

| 90 72 94 DF 00 00 00 04 |

Der ISO 10126 Standard sieht vor, dass die fehlenden Bytes mit Zufallswerten aufgefüllt werden sollen und das letzte Byte die Gesamtlänge des Paddings angeben soll. In unserem Beispiel mit vier Bytes als Padding sieht das dann so aus:

| 90 72 94 DF 8F 9B 62 04 |

Beim Padding nach dem PKCS7 Standard werden alle fehlenden Bytes mit der Gesamtlänge des Paddings aufgefüllt. D.h., wenn sieben Bytes fehlen, werden diese Bytes mit dem Wert 7 aufgefüllt; wenn drei Bytes fehlen, mit dem Wert 3 usw. In unserem Beispiel daher:

| 90 72 94 DF 04 04 04 04 |

Der Angriff

Bei der folgenden Darstellung des Angriffs mittels des Padding-Orakels sind Kenntnisse über die logische XOR-Funktion (Exklusives Oder, Symbol: ⊕) und die Funktionsweise eines CBC-Blockchiffrierers zum Verständnis erforderlich.

Bei dem Angriff mittels des Padding-Orakels handelt es sich um einen sogenannten Chosen Ciphertext Attack. Zum Gelingen benötigt dieser Angriff auf der Gegenseite einen Service, der eine (direkte oder indirekte) Rückmeldung gibt, ob das Padding des verschlüsselten Geheimtextes korrekt war oder nicht. Bei der Gegenseite kann es sich beispielsweise um einen Internet- oder lokalen Netzwerk-Server handeln, der verschlüsselte Anfragen bearbeiten soll.  Dass diese Annahmen nicht realitätsfremd sind, werden wir im letzten Abschnitt dieses Artikels sehen.

Die Funktionsweise eines CBC-Blockchiffrierers ist in der folgenden Abbildung dargestellt (Blockgröße acht Bytes, die zu verschlüsselnde Nachricht inkl. Padding wurde auf drei Blöcke aufgeteilt):

CBC Verschlüsselung

Wichtig ist zu erkennen, dass jeder Klartextblock (Plaintext) vor dem Verschlüsseln mit dem Initialisierungsvektor (IV) bzw. dem im vorherigen Schritt erzeugten Geheimtextblock (Ciphertext) per XOR verknüpft wird.

Der Angreifer ist im Besitz eines verschlüsselten Geheimtextes (einschließlich des zufällig erstellten IV, der in der Regel mitgesendet wird) und möchte die Nachricht entschlüsseln.

C1, C2, C3 sind die drei Geheimtextblöcke der verschlüsselten Nachricht und sind dem Angreifer bekannt; M1, M2, M3 die drei Klartextblöcke der Nachricht und sind geheim. Wie wir aus obiger Abbildung erkennen können, gilt C2 = E(C1 ⊕ M2), wobei E die Verschlüsselungsfunktion darstellt. Beispiel:

| 7D 3E 47 50 64 7A 20 65 | = M2
| 3A 80 4D 2A 88 5F 3D 9E | = C1
| 47 BE 0A 7A EC 25 1D FB | = C1 ⊕ M2
| 73 9C 1F 2A DA 1D 2E AA | = C2 = E(C1 ⊕ M2)

In unserem Beispiel arbeitet das Verschlüsselungssystem mit Padding nach dem PKCS7-Standard, d.h. gültige Paddings wären 01 oder 02 02 oder 03 03 03 usw.

Der Angreifer möchte nun M2 in Erfahrung bringen. Der Angreifer arbeitet sich bei diesem Angriff immer vom letzten Byte zum ersten vor. Da das häufigste Zeichen in deutschen Texten das Leerzeichen ist, wird das Leerzeichen (ASCII-Code 20) als erste Annahme für das letzte Byte von M2 verwendet. Der Angreifer ersetzt das letzte Byte in C1 (nämlich 9E) durch das Ergebnis von 9E ⊕ 20 ⊕ 01 = BF. Der Wert 20 steht dabei für das Leerzeichen und der Wert 01 für ein Padding mit der Länge 1.

Aus
| 3A 80 4D 2A 88 5F 3D 9E | = C1
wird
| 3A 80 4D 2A 88 5F 3D BF | = C'1

Der Angreifer schickt dann die drei Blöcke IV, C’1, C2 an den Server, der den manipulierten Geheimtext entschlüsselt, das Padding auf Gültigkeit überprüft und abhängig davon eine Akzeptanz- oder Fehlermeldung an den Angreifer zurückgibt. Wie wir aus obiger Abbildung erkennen können, gilt M2 = D(C2) ⊕ C1), wobei D die Entschlüsselungsfunktion darstellt. Der Server entschlüsselt C2 und erhält für das letzte Byte von C2 (AA) den Wert FB (siehe oben). FB wird nun mit dem letzten Byte von C’1 per Xor verknüpft und ergibt FB ⊕ BF = 44. Dies ist kein gültiger Padding-Wert, da der Wert größer ist als die Blocklänge. Der Server gibt also eine Fehlermeldung zurück, das Padding ist ungültig.

In unserem Beispiel hatte der Angreifer Pech, denn das letzte Byte von M2 besitzt tatsächlich den Wert 65 (siehe oben) und nicht 20 wie vermutet. Als nächstes probiert es der Angreifer mit dem zweithäufigsten Zeichen, dem Buchstaben e. Der ASCII-Code für e lautet 65. Der Angreifer ersetzt das letzte Byte in C1 durch das Ergebnis von 9E ⊕ 65 ⊕ 01 = FA.

Aus
| 3A 80 4D 2A 88 5F 3D 9E | = C1
wird
| 3A 80 4D 2A 88 5F 3D FA | = C'1

Wiederum sendet der Angreifer die drei Blöcke IV, C’1, C2 an den Server, der den manipulierten Geheimtext entschlüsselt, das Padding auf Gültigkeit überprüft und abhängig davon eine Akzeptanz- oder Fehlermeldung an den Angreifer zurückgibt. Der Server entschlüsselt C2 und erhält für das letzte Byte von C2 (AA) den Wert FB (siehe oben). FB wird nun mit dem letzten Byte von C’1 per Xor verknüpft und ergibt FB ⊕ FA = 01. Dies ist ein gültiger Padding-Wert, nämlich ein Padding der Länge 1, genauso wie es der Angreifer beabsichtigt hatte. Der Server antwortet also, dass das Padding gültig war und der Geheimtext akzeptiert wurde.

Dieses Mal hatte der Angreifer Glück, das letzte Byte von M2 hat tatsächlich den Wert 65. Der Angreifer weiß nun, dass das letzte Byte in M2 den Wert 65 (d.h., Buchstabe e) hat!

Hätte der Angreifer diesmal auch keinen Erfolg gehabt, hätte er alle möglichen Werte für das letzte Byte bis zum Erfolg durchprobiert (insgesamt 256 mögliche Werte, 00 bis FF).

Da der Angreifer nun das letzte Byte der Nachricht M2 kennt, widmet er sich dem vorletzten Byte. Der Angreifer ersetzt das vorletzte Byte in C1 durch das Ergebnis von 3D ⊕ 20 ⊕ 02 = 1F. Das letzte Byte wird durch 9E ⊕ 65 ⊕ 02 = F9. Die beiden Werte 02 stehen für das Padding mit der Länge 2.

Aus
| 3A 80 4D 2A 88 5F 3D 9E | = C1
wird
| 3A 80 4D 2A 88 5F 1F F9 | = C'1

Dieser Vorgang wird solange wiederholt, bis der Angreifer auch den korrekten Wert für das vorletzte Byte kennt. Dann geht er über zum drittletzten Byte usw., bis er schließlich auch das erste Byte von M2 ermitteln konnte. Der Angreifer kennt damit alle Bytes des Blocks M2. Diese Vorgehensweise wiederholt er nun mit den beiden restlichen Blöcken M1 (mit Hilfe des bekannten IV) und M3 der Nachricht und kann so in relativ kurzer Zeit den kompletten Geheimtext entschlüsseln.

Sollte der IV dem Angreifer nicht bekannt sein, so kann er trotzdem alle Blöcke bis auf den ersten entschlüsseln.

(Eine alternative Vorgehensweise besteht darin, die Werte nicht nach einer Häufigkeitsverteilung sondern zufällig auszuwählen. Die Wahrscheinlichkeit, dass dann der erste Versuch richtig ist, beträgt 1/256. Im Durchschnitt wird der Angreifer pro zu erratendem Byte 256/2 = 128 Versuche benötigen. Bei einer Blocklänge von 8 Bytes ergeben das durchschnittlich 8*128 = 1.024 Versuche pro Block. Dieser Angriff ist folglich sehr effizient.)

Das Padding-Orakel in der Praxis

Nachdem wir nun in der Theorie und anhand eines Beispiels verstanden haben, wie der Angriff funktioniert, stellt sich die Frage, ob er denn auch in der Praxis möglich ist bzw. schon durchgeführt wurde. Die Antwort lautet ja. Es gibt sogar im Internet ein Tool, das genau so einen Angriff durchführt.

Beim Padding-Orakel handelt es sich um eine Seitenkanalattacke (Side Channel Attack). Der Erfolg dieses Angriffs hängt davon ab, ob die entschlüsselnde Instanz (z.B. ein Internet-Server) in direkter oder indirekter Form eine Rückmeldung über die Gültigkeit des Paddings zurückgibt. Die Internet-Protokolle SSL/TLS und IPSec sind grundsätzlich empfänglich für diesen Angriff. Ein sehr schönes Beispiel eines Timing Attacks, der das Padding-Orakel benutzt, gibt Brice Canvel in Password Interception in a SSL/TLS Channel.

Wie können Angriffe dieser Form verhindert werden? Durch Verwendung des CTR- statt des CBC-Modus bei Blockchiffrierern (im CTR-Modus findet kein Padding statt) oder durch das Erstellen und Mitsenden eines Message Authentication Codes (MAC) von der verschlüsselten Nachricht. Ebenfalls sollten entschlüsselnde Instanzen keine Rückmeldungen über Erfolg oder Fehler eines Entschlüsselungsvorganges geben, was allerdings in der Realität nicht immer möglich sein wird.

Weiterführende Literatur:
Serge Vaudenay: Security Flaws Induced by CBC Padding Applications to SSL, IPSEC, WTLS…

Cyberkrieg: Wahrheit und Fiktion

Nur wenige Themen haben in letzter Zeit in den Medien so viel Beachtung gefunden wie Cyber-Warfare. Manche Kommentatoren sehen bereits das Ende konventioneller Kriegsführung und haben die Vision, wie im virtuellen Raum Bits gegen Bits und Bytes gegen Bytes kämpfen, ohne dass menschliches Blut vergossen wird. Dies ist natürlich Unsinn. Auch wenn die Informationstechnologie eine immer größere Rolle in unserem heutigen Alltag einnimmt, so bleibt sie doch bloß ein Mittel zum Zweck. Sie wird im modernen Krieg eine vorbereitende und unterstützende Rolle einnehmen, aber nicht mehr. Wie das dann funktionieren wird, konnte man im Kaukasuskrieg 2008 erkennen. Wenige Stunden vor bzw. gleichzeitig mit dem Einmarsch werden wichtige IT-Strukturen über das Internet angegriffen und sabotiert.

Stuxnet hat einen Krieg vermieden
Auch Stuxnet läutete keine neue Ära der Kriegsführung ein. Stuxnet war ein Sabotageakt, der geholfen hat, einen Krieg zu vermeiden statt zu führen. Früher hätte man einen Saboteur in eine feindliche Fabrik gesandt, heute macht man das per USB-Stick. Dank des Erfolges von Stuxnet wurde das iranische Atomprogramm um geschätzte zwei Jahre aufgehalten. Die USA und Israel haben nun zwei Jahre mehr Zeit gewonnen, um über ihre nächsten Schritte nachzudenken und diese vorzubereiten. Wir können sicher sein, dass sie dies auch gerade tun.

Die Befürchtung, dass nun eine Welle von Stuxnet-Nachahmungen auftauchen könnte und die halbe westliche Welt lahm legen werde, ist unbegründet. Stuxnet ist eine hochkomplexe Software, deren Entwicklung nicht nur ein Team von erfahrenen Experten aus mehreren Fachgebieten benötigte, sondern auch Millionen Euro kostete und viele Monate in Anspruch nahm. Es gibt nur fünf oder sechs Länder weltweit, die so ein Projekt durchführen können. Das Wissen um dieses Können dient zur gegenseitigen Abschreckung. In diesem Licht ist auch die jüngste Erklärung des Pentagons zu sehen, die einen militärischen Gegenschlag als Antwort auf einen Cyberangriff anführt.

Viel größere und realistischere Bedrohung geht von den zahlreichen Crackern und Cyberkriminellen aus, die in letzter Zeit in die Webseiten und Server von bekannten Unternehmen wie Sega, Nintendo und Sony eingedrungen sind. Es handelt sich dabei nicht um ausländische Militärexperten, sondern um jugendliche Hobby-Hacker (sogenannte „Script-Kiddies“), die sich im Internet austoben, und Kriminelle, die damit Geld verdienen. Beide Gruppen bedienen sich spezieller Angriffssoftware, die im Internet kostenlos oder für wenig Geld erhältlich sind. Und beide Gruppen wissen auch, dass die Wahrscheinlichkeit, überführt und für die Taten zur Rechenschaft gezogen zu werden, äußerst gering ist. Es ist nur eine Frage der Zeit, bis sich auch Terrororganisationen dieser einfachen, aber effektiven Angriffsmethoden bedienen werden.

Ein politisches Problem
Die Lösungen, die bisher zur Erhöhung der Sicherheit im Internet vorgeschlagen wurden, sind nicht ausreichend. Es handelt sich nämlich dabei in erster Linie um ein politisches Problem und erst in zweiter Linie um ein technisches. Eine vollständige Kontrolle des Internets mit technischen Mitteln ist nicht möglich. Aber das sollte auch nicht das Ziel sein. Die gesamte IT-Sicherheit muss sich aus seiner reaktiven Position befreien und viel stärker präventiv und dynamisch agieren. Dies geht nur mit Hilfe der Politik. So wie es staatliche Brandschutzbestimmungen für Häuser gibt, die ein Mindestmaß an Sicherheit vorschreiben, so muss es auch einen von staatlicher Seite verlangten Mindest-IT-Schutz für Unternehmen und Institutionen geben, der erfüllt werden muss.

Es sollte hinterfragt werden, ob wirklich jedes Wasserkraftwerk oder Heizwerk an das Internet angeschlossen werden muss. Dies ist zwar einfach und kostengünstig, stellt aber ein völlig unnötiges Risiko dar. Das Zivil- und Strafrecht muss besser an die Internetkriminalität angepasst werden, gleichfalls die Computerforensik der Polizeibehörden. Es wird kein Weg daran vorbei führen, dass sich kritische Computersysteme und -netzwerke von statischen, leicht erkund- und angreifbaren Gebilden zu sich permanent selbstständig verändernden Systemen (sogenannten „Moving Targets“) entwickeln, die möglichst wenig Angriffsfläche für möglichst kurze Zeit bieten. Mit Maßnahmen wie diesen kann die Internetsicherheit und Widerstandsfähigkeit im Alltag und im Falle eines Angriffs durch Cyberterroristen signifikant erhöht werden.

Die fünf größten Sicherheitsmythen

1. Ich besitze nichts, was einen Cyberkriminellen interessieren könnte

Aus folgenden drei Gründen ist dies ein Trugschluss:

  1. Die meisten Angreifer sind in erster Linie an der Übernahme der Kontrolle über Ihren Computer interessiert, damit sie darüber im Rechnerverbund (“Bot-Netze”) Schadsoftware oder Spam verschicken können.
  2. Daten, die Sie nicht als wichtig oder vertraulich einschätzen (wie zum Beispiel Ihr Name, Ihre Adresse, Ihr Geburtsdatum), können für einen Angreifer sehr wohl nützlich sein, damit er Ihre Identität übernehmen kann (Identitätsdiebstahl).
  3. Die meisten Angriffe laufen sowieso automatisch ab und es wird vorher nicht ermittelt, ob es auf einem bestimmten Computer etwas zu holen gibt oder nicht.

2. Ich habe eine Anti-Virus-Software installiert, daher bin ich sicher

Eine gute Anti-Virus-Software, die auch Phishing-, E-Mail- und Spyware-Angriffe erkennen kann, ist sicherlich unverzichtbar. Dennoch kann auch sie keinen 100%igen Schutz garantieren. Dies trifft insbesondere auf neue Viren und auf Angriffe zu, die noch unbekannte Sicherheitslücken (sogenannte „Zero-Day-Exploits“) ausnützen. Daher ist es sehr wichtig, die installierte Anti-Virus-Software immer auf den aktuellsten Stand zu halten.

3. Da ich kein Windows verwende, bin ich sicher

Es ist richtig, dass in der Vergangenheit Microsoft Windows das Hauptangriffsziel von Cyberkriminellen war. Da jedoch immer mehr alternative Betriebssysteme (wie Mac OS und Linux) und Webbrowser Verbreitung finden, macht sie das gleichzeitig immer interessanter für Kriminelle, denn diese Systeme besitzen ebenfalls Sicherheitslücken. Darüber hinaus werden in letzter Zeit vermehrt die Sicherheitslücken in Softwareprodukten von Drittherstellern (wie zum Beispiel Adobe Reader und Flash, Java) ausgenützt, die betriebssystemunabhängig vorhanden sind.

4. Ich gehe über einen Router mit integrierter Firewall ins Internet, daher bin ich sicher

Eine Firewall schützt sehr gut vor zufälligen Angriffen von außen. Datenverkehr wie E-Mails und Internet werden jedoch normalerweise nicht gefiltert oder erfordern eine zusätzliche manuelle Konfiguration des Routers. Abgesehen davon erfolgen immer mehr Angriffe heutzutage über den Besuch einer manipulierten Webseite (“Drive-by-Infektion”) oder über Phishing, vor denen eine Firewall nicht schützen kann.

5. Da ich nur auf bekannten und seriösen Webseiten surfe, brauche ich mir keine Sorgen zu machen

Natürlich ist das Risiko eines Angriffs oder einer Infektion größer, wenn Sie zwielichtige Seiten besuchen. Dennoch ist es eine Tatsache, dass in der Vergangenheit sehr wohl auch renommierte Webseiten wie Apple, Microsoft, Yahoo und eBay Opfer von Cross-Site-Scripting-Angriffen waren, die dann Informationen über deren Besucher sammelten oder versuchten, bösartige Software auf den Computern der Besucher zu installieren.