29
Malware-Analyse und Reverse Engineering 11: Verhaltensanalyse von Viren 8.6.2017 Prof. Dr. Michael Engel

Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Malware-AnalyseundReverseEngineering

11:VerhaltensanalysevonViren8.6.2017

Prof.Dr.MichaelEngel

Page 2: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Überblick

Themen:• Verhaltensanalyse• Systemaufruf-Tracesmit lookahead

MARE11– Verhaltensanalyse 2

Page 3: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Verhaltensanalyse

ZweiAnsätzezurErkennungvon„Eindringlingen“(intrusion detection):• Erkennung vonMissbrauch oderMuster(Signaturen)desEindringens(intrusionsignatures)werden verwendet,umdieFunktionalitätbekannterMalwarezu verhindern

• DieErkennung vonAnomalien geht voneinem unbekanntenEindringling aus,dessen Verhalten sich vom normalenbeobachteten Systemverhaltenunterscheidet=>Thema heute

• Viele Erkennungssysteme kombinierenbeide Ansätze

MARE11– Verhaltensanalyse 3

Page 4: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Verhaltensanalyse:BiologischeInspirationAnalogiezunatürlichemImmunsystem:• Annahme (derInformatiker):Natürliche Immunsysteme

unterscheiden zwischen Proteinsegmenten (Peptiden),diezumfunktionierendenKörper gehören (self)undsolchen,dievoneindringendenundfehlerhaft funktionierenden Zellen erzeugtwerden (nonself)

• DiesesModellist inderBiologieallerdings nichtunbedingtanerkannt…J

MARE11– Verhaltensanalyse 4

Page 5: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Verhaltensanalyse:vonBiologiezuInformatikEinsatzeineskünstlichenImmunsystemsfürComputererfordert• Entscheidung,welche Daten oder Aktivitätsmuster desSystems

zur Unterscheidungzwischen selfundnonself verwendetwerden

• Bestimmung,welche Datenströme voneinem Schutzsystem (IDE=IntrusionDetectionSystem)erkanntwerden

• Entwicklungeines Bedrohungsmodells• Also: Finden desComputer-Äquivalentszu Peptiden• Soll Sicherheitsverletzungenerkennen• Dabei wenig falsche Alarme als Reaktion aufübliche

Änderung desSystemverhaltens (Upgrade,Betriebsmodususw.)erzeugen

MARE11– Verhaltensanalyse 5

Page 6: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Verhaltensanalyse:EntwurfsprinzipienAnforderungenandasSystem:• Generischer Mechanismus:erfasst große Vielfalt vonAngriffen• Ist nicht 100%beweisbar sicher unter einemAngriffsmodell

• Adaptierbar bei Änderungen inzu schützendem System• Stellt RobustheitdesSchutzsystems sicher• Analogzu Adaptionanmutierende biologischeViren

• Autonomie:unabhängigeOperationzur Laufzeit desSystems• Abgestufte Reaktion:BiologischeSysteme reagieren mit kleinen

Aktionenaufkleine Abweichungenvom Verhalten,entsprechendmit großen aufgrößere• Softwareist hier oftbinär =>lässt sich dasanpassen?

• Diversität desSchutzes:Schutz vor verschiedenstenAngriffen

MARE11– Verhaltensanalyse 6

Page 7: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

VerhaltensanalysevonViren

Vorgehensweise• Sammelnvon

Daten• Interpretation• Erzeugeneines

Modellsfür„korrektes“(erwartetes)Verhalten

• ZurLaufzeit:AnalysedesrealenVerhaltensundAbgleichmiterwartetem

MARE11– Verhaltensanalyse 7

Behavioral detection of malware: from a survey towards an established taxonomy 253

Moreover this signature can easily be bypassed by creatinga new version of a known viral strain. The required modifica-tions are not considerable; they simply need to be performedat the signature level. The numerous versions of the Bagle e-mail worm referenced by certain observatories illustrate thephenomenon [10]. In a few months, several versions havebeen released by simply modifying the mail subject or add-ing a backdoor. With regards to more recent developments, amajor concern during the last RSA Security Conference wasthe server-side polymorphic malware Storm Worm [11]. Itswriter produces beforehand vast quantities of variants whichare delivered daily in massive bursts. Each burst contains sev-eral different short-lived variants leaving no time to developsignatures for all of them. On a long-term scale, experts willnot be able to cope with this proliferation. As an obviousexplanation, formal works led by Filiol [12] underline theease of signature extraction by a simple black box analysis.This extraction remains possible because of weak signatureschemes.

Because of its generic features, a single behavior signatureshould detect all malware versions coming from a commonstrain. Experts would be able then to establish a hierarchy intheir work, focusing uppermost on new innovative strains. Inaddition, another side effect of form-based detection is thealarmingly growing size of the signature bases. As a solution,older signatures are regularly removed leaving the systemonce again vulnerable. On the opposite, the behavior basesize is less consequent and the signature distribution less fre-quent. Regular base updates remain nevertheless necessary,contrary to what certain marketing speeches claim.

2.2 Resilience to automatic mutations

In the previous part, we have considered the manual evolutionof malware. What happens when these mutations becomeautomatic during propagation? The first significant gener-ation of mutation engines is born with polymorphism [13,p. 140], [14, p. 252]. Polymorphic malware encrypt theirentire code in order to conceal any potential signature. A sim-ple variation of the ciphering key modifies totally their bytesequences. A decryption routine is then required to recoverthe original code and execute it. This routine must possessits own mutation facilities to avoid becoming a signature onits own.

It was quickly discovered that simple emulation couldthwart these engines, making the original code available. Butsearching for signatures has become far more complex withmetamorphism. The malware is not simply encrypted; itswhole body suffers transformations affecting its form whilekeeping its global functioning [13, p. 148], [14, p. 269].The mutation process always begins with disassembling thecode, which is then obfuscated before being reassembled:code reordering, garbage insertion, register reassignment and

Fig. 1 Functional design of a behavioral detector. This decompositionof the system brings into light the articulation between the generationof the behavior models and the detection process. Each one of the threesequential tasks making up detection, processes the data to a higherlevel of interpretation until the final assessment

equivalent instruction substitution. Syntactic analysis is nolonger sufficient to fight these mutations. Eventually, Spinel-lis [15] has shown that the detection of mutating size-boundedviruses by signature is NP-complete. For metamorphicviruses, whose size in unbounded, the result is even worse.Filiol [16] showed that some well chosen rewriting rulescould lead to the undecidability of detection.

If these mutations modify the malware syntax, they are notlikely to modify its semantic, at least for the known cases.Typically, the malware will always use the system servicesand resources in an identical way. Behavioral approachesshould consequently offer a better resilience to mutations.

3 Generic description of a behavioral detector

3.1 System architecture and functioning

A behavioral detector identifies the different actions of a pro-gram through its use of the system resources. Based on itsknowledge of malware, the detector must be able to decidewhether these actions betray a malicious activity or not. Infor-mation about system use is mainly available in the host envi-ronment thus explaining that behavioral detectors work at thislevel. How malware are introduced in the host is not the mainfocus of antivirus products. They can either be automaticallyintroduced through a vulnerability, which is the concern ofintrusion detection, or manually introduced by negligenceof the user. Antivirus products often act as a last local bar-rier of protection when previous barriers (firewalls, intrusiondetection systems. . .) have been successfully bypassed.

Behavioral detectors are basically split into four maincomponents responsible for distinct tasks. This decompo-sition is schematically represented in Fig. 1.

123

Page 8: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

VerhaltensanalysevonViren

EinordnungderVerhal-tensanalyseAndereAnsätze:• Formale

Verifikation• Simulations-

basierteVerifikation

MARE11– Verhaltensanalyse 8

Behavioral detection of malware: from a survey towards an established taxonomy 255

Fig. 2 Characteristics ofbehavioral detectors. Theclassification is globally dividedinto two axes corresponding tothe simulation-based verificationand formal verification. Thetype of verification is directlyimpacted by the method used fordata collection: static ordynamic. The behavioral modelgeneration is introduced as anadditional transversal axis

Unobtrusiveness guarantees that the observedbehavior will not be altered by the detection.

4 Taxonomy of behavioral detector

As said in Sect. 1, the leading thread of our taxonomy isthe parallel made between behavioral detection and programtesting. The taxonomy is thus built on two main axes divid-ing the detection process into simulation-based verificationand formal verification. A third transversal axis is added forthe behavioral model generation. The global structure of thetaxonomy and the classification of the detectors is picturedin Fig. 2.

Inside simulation-based verification and formal verifica-tion, the different classes of detectors have been dividedaccording to the different tasks of the detection process (seeSect. 3.1). In particular, these tasks define the progressionused in the next sections that detail, respectively, the two ver-ification approaches. To simplify the reading, data collectionand interpretation are presented in a same part because thenature and the quantity of the collected data strongly impactthe possible means of interpretation. Similarly, the matchingalgorithms and the behavior models are also gathered in asame part since the algorithm directly determine the modelformat. Now let us describe the three axes of the taxonomyaccording to this division.

4.1 Simulation-based verification

Simulation-based verification is similar to a black box testprocedure and is thus strongly linked to dynamic analysis.Only the current execution path is analyzed making thebehavioral detector work on a sequence of discrete eventsthat will be compared to the reference model: the behavioralsignature. In particular, this kind of verification requires adedicated simulation environment for data collection.

4.1.1 Data collection and interpretation: dynamicmonitoring

Detection of malware during their execution must rely onelements observable from an external agent. On older oper-ating systems, the interception of interruptions was the firstsource of information about the resources used by a pro-gram. They have been progressively replaced by the inter-ception of system calls with the apparition of 32-bit systems.System calls are particularly interesting since, in order tocomply with the C2 criteria from the Orange Book, theyremain a mandatory passing point to access kernel servicesand objects from the user space. In their work on intrusiondetection based on system calls, Forrest et al. [7] underlinethe importance of the collected data and their representa-tion: they strongly influence the analysis and the detection. Inthe present case, sequential representations are mainly used

123

Page 9: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Ein„Selbstbewusstsein“fürProzesse(1)Unterscheidungvon„eigenem“(erwarteten)und„fremdem“(unerwartetem)Verhalten:• “Finden desComputer-Äquivalents zu Peptiden“• Große Menge verschiedener Ansätzen,Verhalten zu beobachten:• Kontrollfluss (schon gesehen)• Angelegte Dateien• Netzwerkverbindungen

• Aber auch “exotische”Systemparameter wie:• Elektrische Leistungsaufnahme• Abgestrahlte elektromagnetische Felder• Verhalten vonCaches/TLBs,z.B.[4]• Angreifer nutzen diese für “sidechannelattacks”zurAnalyse vonVerhalten

MARE11– Verhaltensanalyse 9

Forrestetal., “ASenseofSelfforUnixProcesses”,IEEESymposium onSecurityandPrivacy,1996

Page 10: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Ein„Selbstbewusstsein“fürProzesse(2)SystemaufrufealsDatenbasisfürVerhaltensanalyse• Jedes Programm besitzt implizit eine Menge vonSystemaufrufe,diees erzeugen kann

• Abfolge vonSystemaufrufen im KontrollflussdesProgrammserzeugt mögliche Folgen vonSystemaufrufen

• Dienormale Ausführung eines Programms erzeugt eineTeilmenge aller möglichen Abfolgen

• Theoretische Anzahl vonAbfolgen inrealem (nicht trivialen)Programm ist sehr groß =>jede Ausführung kann zu bisher nichtbeobachteter Abfolge vonSystemaufrufen führen!

• Beobachtung: lokale AnordnungvonSystemaufrufen (kurzeFolgen)ist sehr konsistent=>Basiszur Bestimmung des“self”=“normales”Verhalten

MARE11– Verhaltensanalyse 10

Forrestetal., “ASenseofSelfforUnixProcesses”,IEEESymposium onSecurityandPrivacy,1996

Page 11: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

AnalysevonSystemaufruf-TracesmitLookaheadAnalysekurzesAbfolgenvonSystemaufrufen• Normales Verhalten:definiert durch kurze Abfolgen von

Systemaufrufen mit Längen 5,6und11Aufrufe• Vorgehensweise:Aufbau einer separaten Datenbank für jeden

zu beobachtendenProzess• spezifisch für SW-Architektur,-Version,und-Konfiguration,

lokalen Vorgabe undBenutzungsmuster• Durch große Variabilität zwischen Systemen entsteht

eindeutigeDefinitiondes“self”für diemeisten Systeme• Hinreichendgroße undstabileDatenbankinhaltewerden zur

Überwachung desjeweiligenProzesses verwendet• Abfolgen inderDatenbank =>normales Verhalten• Nicht gefundene Abfolgen=>Verhaltensabweichung

MARE11– Verhaltensanalyse 11

Page 12: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:AufbaueinerVerhaltensdatenbank(1)Aufbau einer Datenbankmit “normalen” Tracesv.Systemaufrufen

„Slidingwindow“überletzten aufgezeichneteSystemaufrufe:

Aufruf-Trace:

Bestimmungmöglicher (“legaler”)Folgeaufrufe zu gegebenemAufruf für Position1–4,Betrachtung vonbis zu drei Folgeaufrufen:

MARE11– Verhaltensanalyse 12

3.1 Details

There are two stages to the proposed algorithm. In thefirst stage, we scan traces of normal behavior and buildup a database of characteristic normal patterns (observedsequences of system calls). Forks are traced individually,and their &aces are included as part of normal.* In thesecond stage, we scan new traces that might contain abnor-mal behavior, looking for patterns not present in the normaldatabase. In our current implementation, analysis of tracesis performed off-line.To build up the database, we slide a window of size

k + 1 across the trace of system calls and record which callsfollow which within the sliding window. Suppose we choosek = 3 and are given the following sequence of system callsto define normal behavio~

open, read, remap, remap, open, getrlimit, remap, close

As we slide the window across the sequence, we record foreach call the call that follows it at position 1, at position 2,and so forth, up to position k. For the first window, fromindex 1 in the sequence to index 4, the following databaseis produced:

call I position 1 \ position 2 position 3open I read remap remapread I remap I remap Iremap I remap I I

Whenever a call occurs more than once, it can be followedby several different possible calls. These are all recorded.After sliding the window across the complete sequence, weproduce this expanded database:

callopen

readremap

getrlimitclose

position 1read,getrlimitremapremap,open,closeremap

position 2remap

remapopen,getrlimit

close

position 3remap,closeopengetrlimit,remap

Once we have the database of normal patterns, we checknew traces against it using the same m_ethod. We slide awindow of size k + 1 across the new trace, determining ifthe sequence of system calls differs from that recorded inthe normal database, In our work to date, we simply test forthe presence or absence of legal sequences. As an example,suppose that we had constructed the above database and weregiven a new trace of calls, differing at one location from thenormal sequence (open replaces remap as the fourth call inthe sequence):

1Due to a limi~tion of our tracingpackage,we = not CUIWnttY fol-

lowing virtual forks.

open, read, remap, open, open, getrlimit, remap, close

This trace would generate 4 mismatches, because:

● open is not followed by open at position 3,

● read is not followed by open at position 2,

. open is not followed by open at position 1, and

● open is not followed by getrlimit at position 2.

We record the number of mismatches as a percentage ofthe total possible number of mismatches. The maximumnumber of pairwise mismatches for a sequence of length Lwith a lookahead of k is:

k(L–k)+(k– l)+(k–2)+... +l=k((k+l)l2)2).

In our example trace, L = 8, k = 3, and we have 4 mis-matches. From the above formula, we get a maximumdatabase size of 18, giving a 22% miss rate. Mismatches arethe only observable that we use to distinguish normal fromabnormal.This simple algorithm can be efficiently implemented to

run in O(N) time, where N is the length of the trace (in termsof system calls). For example, our current implementationanalyzes traces at an approximate rate of 1250 system callsper second.

4 Experiments

In the previous section we introduced a definition fornormal behavior, based on short sequences of system calls.The usefulness of the definition will largely be determinedby the answers to the following questions:

what size database do we need to capture normal be-havior?

What percentage of possible system call sequences iscovered by the database of “normal” system call se-quences?

Does our definition of normal behavior distinguish be-tween different kinds of programs?

Does our definition of normal detect anomalous behav-ior?

This section reports our preliminary answers to these ques-tions. In these experiments, we focus on sendrnai 1 al-though we report some data for lpr. The send.mai 1 pro-gram is sufficiently varied and complex to provide a goodinitial test, and there are several documented attacks againstsendmai. 1 that can be used for testing. If we are successfulwith s endma i 1 we conjecture that we will be successful

122

3.1 Details

There are two stages to the proposed algorithm. In thefirst stage, we scan traces of normal behavior and buildup a database of characteristic normal patterns (observedsequences of system calls). Forks are traced individually,and their &aces are included as part of normal.* In thesecond stage, we scan new traces that might contain abnor-mal behavior, looking for patterns not present in the normaldatabase. In our current implementation, analysis of tracesis performed off-line.To build up the database, we slide a window of size

k + 1 across the trace of system calls and record which callsfollow which within the sliding window. Suppose we choosek = 3 and are given the following sequence of system callsto define normal behavio~

open, read, remap, remap, open, getrlimit, remap, close

As we slide the window across the sequence, we record foreach call the call that follows it at position 1, at position 2,and so forth, up to position k. For the first window, fromindex 1 in the sequence to index 4, the following databaseis produced:

call I position 1 \ position 2 position 3open I read remap remapread I remap I remap Iremap I remap I I

Whenever a call occurs more than once, it can be followedby several different possible calls. These are all recorded.After sliding the window across the complete sequence, weproduce this expanded database:

callopen

readremap

getrlimitclose

position 1read,getrlimitremapremap,open,closeremap

position 2remap

remapopen,getrlimit

close

position 3remap,closeopengetrlimit,remap

Once we have the database of normal patterns, we checknew traces against it using the same m_ethod. We slide awindow of size k + 1 across the new trace, determining ifthe sequence of system calls differs from that recorded inthe normal database, In our work to date, we simply test forthe presence or absence of legal sequences. As an example,suppose that we had constructed the above database and weregiven a new trace of calls, differing at one location from thenormal sequence (open replaces remap as the fourth call inthe sequence):

1Due to a limi~tion of our tracingpackage,we = not CUIWnttY fol-

lowing virtual forks.

open, read, remap, open, open, getrlimit, remap, close

This trace would generate 4 mismatches, because:

● open is not followed by open at position 3,

● read is not followed by open at position 2,

. open is not followed by open at position 1, and

● open is not followed by getrlimit at position 2.

We record the number of mismatches as a percentage ofthe total possible number of mismatches. The maximumnumber of pairwise mismatches for a sequence of length Lwith a lookahead of k is:

k(L–k)+(k– l)+(k–2)+... +l=k((k+l)l2)2).

In our example trace, L = 8, k = 3, and we have 4 mis-matches. From the above formula, we get a maximumdatabase size of 18, giving a 22% miss rate. Mismatches arethe only observable that we use to distinguish normal fromabnormal.This simple algorithm can be efficiently implemented to

run in O(N) time, where N is the length of the trace (in termsof system calls). For example, our current implementationanalyzes traces at an approximate rate of 1250 system callsper second.

4 Experiments

In the previous section we introduced a definition fornormal behavior, based on short sequences of system calls.The usefulness of the definition will largely be determinedby the answers to the following questions:

what size database do we need to capture normal be-havior?

What percentage of possible system call sequences iscovered by the database of “normal” system call se-quences?

Does our definition of normal behavior distinguish be-tween different kinds of programs?

Does our definition of normal detect anomalous behav-ior?

This section reports our preliminary answers to these ques-tions. In these experiments, we focus on sendrnai 1 al-though we report some data for lpr. The send.mai 1 pro-gram is sufficiently varied and complex to provide a goodinitial test, and there are several documented attacks againstsendmai. 1 that can be used for testing. If we are successfulwith s endma i 1 we conjecture that we will be successful

122

❶ ❷ ❸

Page 13: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:AufbaueinerVerhaltensdatenbank(2)„Sliding window“überletzten aufgezeichneteSystemaufrufe:

Aufruf-Trace:

Gesamte Daten-bankmöglicherSystemaufruf-folgen:

MARE11– Verhaltensanalyse 13

3.1 Details

There are two stages to the proposed algorithm. In thefirst stage, we scan traces of normal behavior and buildup a database of characteristic normal patterns (observedsequences of system calls). Forks are traced individually,and their &aces are included as part of normal.* In thesecond stage, we scan new traces that might contain abnor-mal behavior, looking for patterns not present in the normaldatabase. In our current implementation, analysis of tracesis performed off-line.To build up the database, we slide a window of size

k + 1 across the trace of system calls and record which callsfollow which within the sliding window. Suppose we choosek = 3 and are given the following sequence of system callsto define normal behavio~

open, read, remap, remap, open, getrlimit, remap, close

As we slide the window across the sequence, we record foreach call the call that follows it at position 1, at position 2,and so forth, up to position k. For the first window, fromindex 1 in the sequence to index 4, the following databaseis produced:

call I position 1 \ position 2 position 3open I read remap remapread I remap I remap Iremap I remap I I

Whenever a call occurs more than once, it can be followedby several different possible calls. These are all recorded.After sliding the window across the complete sequence, weproduce this expanded database:

callopen

readremap

getrlimitclose

position 1read,getrlimitremapremap,open,closeremap

position 2remap

remapopen,getrlimit

close

position 3remap,closeopengetrlimit,remap

Once we have the database of normal patterns, we checknew traces against it using the same m_ethod. We slide awindow of size k + 1 across the new trace, determining ifthe sequence of system calls differs from that recorded inthe normal database, In our work to date, we simply test forthe presence or absence of legal sequences. As an example,suppose that we had constructed the above database and weregiven a new trace of calls, differing at one location from thenormal sequence (open replaces remap as the fourth call inthe sequence):

1Due to a limi~tion of our tracingpackage,we = not CUIWnttY fol-

lowing virtual forks.

open, read, remap, open, open, getrlimit, remap, close

This trace would generate 4 mismatches, because:

● open is not followed by open at position 3,

● read is not followed by open at position 2,

. open is not followed by open at position 1, and

● open is not followed by getrlimit at position 2.

We record the number of mismatches as a percentage ofthe total possible number of mismatches. The maximumnumber of pairwise mismatches for a sequence of length Lwith a lookahead of k is:

k(L–k)+(k– l)+(k–2)+... +l=k((k+l)l2)2).

In our example trace, L = 8, k = 3, and we have 4 mis-matches. From the above formula, we get a maximumdatabase size of 18, giving a 22% miss rate. Mismatches arethe only observable that we use to distinguish normal fromabnormal.This simple algorithm can be efficiently implemented to

run in O(N) time, where N is the length of the trace (in termsof system calls). For example, our current implementationanalyzes traces at an approximate rate of 1250 system callsper second.

4 Experiments

In the previous section we introduced a definition fornormal behavior, based on short sequences of system calls.The usefulness of the definition will largely be determinedby the answers to the following questions:

what size database do we need to capture normal be-havior?

What percentage of possible system call sequences iscovered by the database of “normal” system call se-quences?

Does our definition of normal behavior distinguish be-tween different kinds of programs?

Does our definition of normal detect anomalous behav-ior?

This section reports our preliminary answers to these ques-tions. In these experiments, we focus on sendrnai 1 al-though we report some data for lpr. The send.mai 1 pro-gram is sufficiently varied and complex to provide a goodinitial test, and there are several documented attacks againstsendmai. 1 that can be used for testing. If we are successfulwith s endma i 1 we conjecture that we will be successful

122

❶ ❷ ❸

3.1 Details

There are two stages to the proposed algorithm. In thefirst stage, we scan traces of normal behavior and buildup a database of characteristic normal patterns (observedsequences of system calls). Forks are traced individually,and their &aces are included as part of normal.* In thesecond stage, we scan new traces that might contain abnor-mal behavior, looking for patterns not present in the normaldatabase. In our current implementation, analysis of tracesis performed off-line.To build up the database, we slide a window of size

k + 1 across the trace of system calls and record which callsfollow which within the sliding window. Suppose we choosek = 3 and are given the following sequence of system callsto define normal behavio~

open, read, remap, remap, open, getrlimit, remap, close

As we slide the window across the sequence, we record foreach call the call that follows it at position 1, at position 2,and so forth, up to position k. For the first window, fromindex 1 in the sequence to index 4, the following databaseis produced:

call I position 1 \ position 2 position 3open I read remap remapread I remap I remap Iremap I remap I I

Whenever a call occurs more than once, it can be followedby several different possible calls. These are all recorded.After sliding the window across the complete sequence, weproduce this expanded database:

callopen

readremap

getrlimitclose

position 1read,getrlimitremapremap,open,closeremap

position 2remap

remapopen,getrlimit

close

position 3remap,closeopengetrlimit,remap

Once we have the database of normal patterns, we checknew traces against it using the same m_ethod. We slide awindow of size k + 1 across the new trace, determining ifthe sequence of system calls differs from that recorded inthe normal database, In our work to date, we simply test forthe presence or absence of legal sequences. As an example,suppose that we had constructed the above database and weregiven a new trace of calls, differing at one location from thenormal sequence (open replaces remap as the fourth call inthe sequence):

1Due to a limi~tion of our tracingpackage,we = not CUIWnttY fol-

lowing virtual forks.

open, read, remap, open, open, getrlimit, remap, close

This trace would generate 4 mismatches, because:

● open is not followed by open at position 3,

● read is not followed by open at position 2,

. open is not followed by open at position 1, and

● open is not followed by getrlimit at position 2.

We record the number of mismatches as a percentage ofthe total possible number of mismatches. The maximumnumber of pairwise mismatches for a sequence of length Lwith a lookahead of k is:

k(L–k)+(k– l)+(k–2)+... +l=k((k+l)l2)2).

In our example trace, L = 8, k = 3, and we have 4 mis-matches. From the above formula, we get a maximumdatabase size of 18, giving a 22% miss rate. Mismatches arethe only observable that we use to distinguish normal fromabnormal.This simple algorithm can be efficiently implemented to

run in O(N) time, where N is the length of the trace (in termsof system calls). For example, our current implementationanalyzes traces at an approximate rate of 1250 system callsper second.

4 Experiments

In the previous section we introduced a definition fornormal behavior, based on short sequences of system calls.The usefulness of the definition will largely be determinedby the answers to the following questions:

what size database do we need to capture normal be-havior?

What percentage of possible system call sequences iscovered by the database of “normal” system call se-quences?

Does our definition of normal behavior distinguish be-tween different kinds of programs?

Does our definition of normal detect anomalous behav-ior?

This section reports our preliminary answers to these ques-tions. In these experiments, we focus on sendrnai 1 al-though we report some data for lpr. The send.mai 1 pro-gram is sufficiently varied and complex to provide a goodinitial test, and there are several documented attacks againstsendmai. 1 that can be used for testing. If we are successfulwith s endma i 1 we conjecture that we will be successful

122

Page 14: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Verhaltensanalyse(1)AnalysevonProzessen• Analogzur Ermittlungder“normalen”Abfolgemuster• Neue Traceswerden zur Laufzeit gesammelt (=>strace/ptrace)

undmit Mustern inderDatenbank verglichen• WindowderGröße k+1wird über denneuen Tracebewegt• Feststellen,ob dieaktuelle Abfolge vonSystemaufrufen von

denen inderDatenbank abweicht• Einfachster Ansatz:TestaufVorhandenseinoder

Abwesenheit einer legalen Abfolge

MARE11– Verhaltensanalyse 14

Page 15: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Verhaltensanalyse(2)Neuer erfasster Systemaufruf-Trace:• Unterschied aneiner Stelle:

remap➛ open

Erzeugt 4Abweichungen im Vergleich zur Datenbank:• Aufopenfolgt kein openanPosition3• Aufreadfolgt kein openanPosition2• Aufopenfolgt kein openanPosition1 und• Aufopenfolgt kein getrlimit anPosition2

MARE11– Verhaltensanalyse 15

3.1 Details

There are two stages to the proposed algorithm. In thefirst stage, we scan traces of normal behavior and buildup a database of characteristic normal patterns (observedsequences of system calls). Forks are traced individually,and their &aces are included as part of normal.* In thesecond stage, we scan new traces that might contain abnor-mal behavior, looking for patterns not present in the normaldatabase. In our current implementation, analysis of tracesis performed off-line.To build up the database, we slide a window of size

k + 1 across the trace of system calls and record which callsfollow which within the sliding window. Suppose we choosek = 3 and are given the following sequence of system callsto define normal behavio~

open, read, remap, remap, open, getrlimit, remap, close

As we slide the window across the sequence, we record foreach call the call that follows it at position 1, at position 2,and so forth, up to position k. For the first window, fromindex 1 in the sequence to index 4, the following databaseis produced:

call I position 1 \ position 2 position 3open I read remap remapread I remap I remap Iremap I remap I I

Whenever a call occurs more than once, it can be followedby several different possible calls. These are all recorded.After sliding the window across the complete sequence, weproduce this expanded database:

callopen

readremap

getrlimitclose

position 1read,getrlimitremapremap,open,closeremap

position 2remap

remapopen,getrlimit

close

position 3remap,closeopengetrlimit,remap

Once we have the database of normal patterns, we checknew traces against it using the same m_ethod. We slide awindow of size k + 1 across the new trace, determining ifthe sequence of system calls differs from that recorded inthe normal database, In our work to date, we simply test forthe presence or absence of legal sequences. As an example,suppose that we had constructed the above database and weregiven a new trace of calls, differing at one location from thenormal sequence (open replaces remap as the fourth call inthe sequence):

1Due to a limi~tion of our tracingpackage,we = not CUIWnttY fol-

lowing virtual forks.

open, read, remap, open, open, getrlimit, remap, close

This trace would generate 4 mismatches, because:

● open is not followed by open at position 3,

● read is not followed by open at position 2,

. open is not followed by open at position 1, and

● open is not followed by getrlimit at position 2.

We record the number of mismatches as a percentage ofthe total possible number of mismatches. The maximumnumber of pairwise mismatches for a sequence of length Lwith a lookahead of k is:

k(L–k)+(k– l)+(k–2)+... +l=k((k+l)l2)2).

In our example trace, L = 8, k = 3, and we have 4 mis-matches. From the above formula, we get a maximumdatabase size of 18, giving a 22% miss rate. Mismatches arethe only observable that we use to distinguish normal fromabnormal.This simple algorithm can be efficiently implemented to

run in O(N) time, where N is the length of the trace (in termsof system calls). For example, our current implementationanalyzes traces at an approximate rate of 1250 system callsper second.

4 Experiments

In the previous section we introduced a definition fornormal behavior, based on short sequences of system calls.The usefulness of the definition will largely be determinedby the answers to the following questions:

what size database do we need to capture normal be-havior?

What percentage of possible system call sequences iscovered by the database of “normal” system call se-quences?

Does our definition of normal behavior distinguish be-tween different kinds of programs?

Does our definition of normal detect anomalous behav-ior?

This section reports our preliminary answers to these ques-tions. In these experiments, we focus on sendrnai 1 al-though we report some data for lpr. The send.mai 1 pro-gram is sufficiently varied and complex to provide a goodinitial test, and there are several documented attacks againstsendmai. 1 that can be used for testing. If we are successfulwith s endma i 1 we conjecture that we will be successful

122

3.1 Details

There are two stages to the proposed algorithm. In thefirst stage, we scan traces of normal behavior and buildup a database of characteristic normal patterns (observedsequences of system calls). Forks are traced individually,and their &aces are included as part of normal.* In thesecond stage, we scan new traces that might contain abnor-mal behavior, looking for patterns not present in the normaldatabase. In our current implementation, analysis of tracesis performed off-line.To build up the database, we slide a window of size

k + 1 across the trace of system calls and record which callsfollow which within the sliding window. Suppose we choosek = 3 and are given the following sequence of system callsto define normal behavio~

open, read, remap, remap, open, getrlimit, remap, close

As we slide the window across the sequence, we record foreach call the call that follows it at position 1, at position 2,and so forth, up to position k. For the first window, fromindex 1 in the sequence to index 4, the following databaseis produced:

call I position 1 \ position 2 position 3open I read remap remapread I remap I remap Iremap I remap I I

Whenever a call occurs more than once, it can be followedby several different possible calls. These are all recorded.After sliding the window across the complete sequence, weproduce this expanded database:

callopen

readremap

getrlimitclose

position 1read,getrlimitremapremap,open,closeremap

position 2remap

remapopen,getrlimit

close

position 3remap,closeopengetrlimit,remap

Once we have the database of normal patterns, we checknew traces against it using the same m_ethod. We slide awindow of size k + 1 across the new trace, determining ifthe sequence of system calls differs from that recorded inthe normal database, In our work to date, we simply test forthe presence or absence of legal sequences. As an example,suppose that we had constructed the above database and weregiven a new trace of calls, differing at one location from thenormal sequence (open replaces remap as the fourth call inthe sequence):

1Due to a limi~tion of our tracingpackage,we = not CUIWnttY fol-

lowing virtual forks.

open, read, remap, open, open, getrlimit, remap, close

This trace would generate 4 mismatches, because:

● open is not followed by open at position 3,

● read is not followed by open at position 2,

. open is not followed by open at position 1, and

● open is not followed by getrlimit at position 2.

We record the number of mismatches as a percentage ofthe total possible number of mismatches. The maximumnumber of pairwise mismatches for a sequence of length Lwith a lookahead of k is:

k(L–k)+(k– l)+(k–2)+... +l=k((k+l)l2)2).

In our example trace, L = 8, k = 3, and we have 4 mis-matches. From the above formula, we get a maximumdatabase size of 18, giving a 22% miss rate. Mismatches arethe only observable that we use to distinguish normal fromabnormal.This simple algorithm can be efficiently implemented to

run in O(N) time, where N is the length of the trace (in termsof system calls). For example, our current implementationanalyzes traces at an approximate rate of 1250 system callsper second.

4 Experiments

In the previous section we introduced a definition fornormal behavior, based on short sequences of system calls.The usefulness of the definition will largely be determinedby the answers to the following questions:

what size database do we need to capture normal be-havior?

What percentage of possible system call sequences iscovered by the database of “normal” system call se-quences?

Does our definition of normal behavior distinguish be-tween different kinds of programs?

Does our definition of normal detect anomalous behav-ior?

This section reports our preliminary answers to these ques-tions. In these experiments, we focus on sendrnai 1 al-though we report some data for lpr. The send.mai 1 pro-gram is sufficiently varied and complex to provide a goodinitial test, and there are several documented attacks againstsendmai. 1 that can be used for testing. If we are successfulwith s endma i 1 we conjecture that we will be successful

122

DatenbankderAufruf-abfolgen

Page 16: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Verhaltensanalyse(3)Anzahl derAbweichungen wird als Prozentsatz dermaximalmöglichen Anzahl vonAbweichungen ermittelt• Maximale Anzahl paarweiser Abweichungen für eine Abfolgeder

Länge Lmit einem Lookahead vonkbeträgt:

Im Beispiel:L=8,k=3undes gibt 4Abweichungen• Formel ergibtmax.Datenbankgrößevon18=>22%Abweichung• Abweichungen sind einziger Parameter,der“normal”von“nicht

normal”unterscheidetLookahead-Algorithmus implementierbar inO(N)• N=Länge desTrace(Anzahl Systemaufrufe)• Beispiel:Analyse vonTracesmit ca.1250Systemaufrufen/Sekunde

MARE11– Verhaltensanalyse 16

3.1 Details

There are two stages to the proposed algorithm. In thefirst stage, we scan traces of normal behavior and buildup a database of characteristic normal patterns (observedsequences of system calls). Forks are traced individually,and their &aces are included as part of normal.* In thesecond stage, we scan new traces that might contain abnor-mal behavior, looking for patterns not present in the normaldatabase. In our current implementation, analysis of tracesis performed off-line.To build up the database, we slide a window of size

k + 1 across the trace of system calls and record which callsfollow which within the sliding window. Suppose we choosek = 3 and are given the following sequence of system callsto define normal behavio~

open, read, remap, remap, open, getrlimit, remap, close

As we slide the window across the sequence, we record foreach call the call that follows it at position 1, at position 2,and so forth, up to position k. For the first window, fromindex 1 in the sequence to index 4, the following databaseis produced:

call I position 1 \ position 2 position 3open I read remap remapread I remap I remap Iremap I remap I I

Whenever a call occurs more than once, it can be followedby several different possible calls. These are all recorded.After sliding the window across the complete sequence, weproduce this expanded database:

callopen

readremap

getrlimitclose

position 1read,getrlimitremapremap,open,closeremap

position 2remap

remapopen,getrlimit

close

position 3remap,closeopengetrlimit,remap

Once we have the database of normal patterns, we checknew traces against it using the same m_ethod. We slide awindow of size k + 1 across the new trace, determining ifthe sequence of system calls differs from that recorded inthe normal database, In our work to date, we simply test forthe presence or absence of legal sequences. As an example,suppose that we had constructed the above database and weregiven a new trace of calls, differing at one location from thenormal sequence (open replaces remap as the fourth call inthe sequence):

1Due to a limi~tion of our tracingpackage,we = not CUIWnttY fol-

lowing virtual forks.

open, read, remap, open, open, getrlimit, remap, close

This trace would generate 4 mismatches, because:

● open is not followed by open at position 3,

● read is not followed by open at position 2,

. open is not followed by open at position 1, and

● open is not followed by getrlimit at position 2.

We record the number of mismatches as a percentage ofthe total possible number of mismatches. The maximumnumber of pairwise mismatches for a sequence of length Lwith a lookahead of k is:

k(L–k)+(k– l)+(k–2)+... +l=k((k+l)l2)2).

In our example trace, L = 8, k = 3, and we have 4 mis-matches. From the above formula, we get a maximumdatabase size of 18, giving a 22% miss rate. Mismatches arethe only observable that we use to distinguish normal fromabnormal.This simple algorithm can be efficiently implemented to

run in O(N) time, where N is the length of the trace (in termsof system calls). For example, our current implementationanalyzes traces at an approximate rate of 1250 system callsper second.

4 Experiments

In the previous section we introduced a definition fornormal behavior, based on short sequences of system calls.The usefulness of the definition will largely be determinedby the answers to the following questions:

what size database do we need to capture normal be-havior?

What percentage of possible system call sequences iscovered by the database of “normal” system call se-quences?

Does our definition of normal behavior distinguish be-tween different kinds of programs?

Does our definition of normal detect anomalous behav-ior?

This section reports our preliminary answers to these ques-tions. In these experiments, we focus on sendrnai 1 al-though we report some data for lpr. The send.mai 1 pro-gram is sufficiently varied and complex to provide a goodinitial test, and there are several documented attacks againstsendmai. 1 that can be used for testing. If we are successfulwith s endma i 1 we conjecture that we will be successful

122

Page 17: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Evaluation(1)IstdievorgeschlageneMethodesinnvoll und realisierbar?• Wie groß mussdieDatenbank sein,um“normales”Verhalten

beschreiben zu können?• Welcher Bruchteil aller möglichen Systemaufruf-Abfolgen wird

vonderDatenbank “normaler”Abfolgenerfasst?• Kann diese Definitionvon“normalem”Verhalten zwischen

verschiedenen Arten vonProgrammen unterscheiden?• Kann diese Definitionvon“normal”tatsächlich abweichendes

Verhalten erkennen?

Experimente:• Analyse vonsendmail unter SunOS4.1.1/4.1.4mit strace

MARE11– Verhaltensanalyse 17

Page 18: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Evaluation(2)WelcheDaten zurDatenbank-Erstellungverwenden?• Syscall-Folgenabhängig vonParametern• Kommandozeilenparameter,Eingaben,Dateien,…

• Entscheidung:• Erzeugen vonkünstlichenEingaben,diealle normale Modi

vonsendmail abdecken?• oder reales Verhalten vonsendmail beobachten undhoffen,

dass diesalle Fälle von“normal”abdeckt?

MARE11– Verhaltensanalyse 18

Page 19: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Evaluation(3)WelcheDaten zurDatenbank-Erstellungverwenden?• Hier:112konstruierte Nachrichten• Enthalten soviel Variationwie

möglich• Erzeugen kombinierteTracelänge

von>1,5Millionen syscalls• FürWindowgröße 6:Datenbank

mit ~1500Einträgen• Jeder Eintrag:

ein Paar Systemaufrufe mit Lookahead-Wert• Eintrag =Paar vonSystemaufrufen mit Lookahead-Wert• z.B.ist “read”legaler Nachfolger von“open”anPos.1

MARE11– Verhaltensanalyse 19

with many other privileged Unix processes. All of our datato date have been generated on Sun SPARCstations runningunpatched versions of SunOS 4.1.1 and 4.1.4, using the in-chtded sendmai 1. The s t race package, version 3.0,was used to gather information on system calls.

4.1 Building a normal database

Although the idea of collecting traces of normal behaviorsounds simple, there are a number of decisions that mustbe made regarding how much and what kind of normalbehavior is appropriate. Specifically, should we generatean artificial set of test messages that exercises all normalmodes ofs endrnai 1 or should we monitor real user mailand hope that it covers the full spectrum of normal (morein the spirit of our approach)? This question is especiallyrelevant for sendrna i 1 because its behavior is so varied.If we fail to capture all the sources of legal variations, thenit will be easier to detect intrusions and be an unfair testbecause of false positives. We elected to use a suite of112 artificially constructed messages, which included asmany normal variations as possible. These 112 messagesproduced a a combined trace length of over 1.5 millionsystem calls. For a window size of 6, the 112 messagesproduced a database with w 1500 entries, where one entrycorresponds to a single pair of system calls with a lookaheadvalue (e.g., read is a legal successor to open at position 1).Once the normal database is defined, the next decision is

how to measure new behavior and determine if it is normal orabnormal. The easiest and most natural measure is simply tocount the number of mismatches between a new trace and thedatabase. We report these counts both as a raw number andas a percentage of the total number of matches performed inthe trace, which reflects the length of the trace. Ideally, wewould like these numbers to be zero for new examples ofnormal behavior, and for them to jump significantly whenabnormalities occur. In a real system, a threshold valuewould need to be determined, below which a behavior issaid to be normal, and above which it is deemed anomalous.In this study, we simply report the numbers, because we arenot taking any action or making a bhtary decision based onthem. Because our normal database covers most variationsin normal, any mismatches are in principle significant.Returning to our earlier questions, the size of the nor-

mal database is of interest for two reasons. First, if thedatabase is small then it defines a compact signature for therunning process that would be practical to check in real-timewhile the process is active, Conversely, if the database islarge then our approach will be too expensive to use foron-line monitoring. Second, the size of the normal databasegives an estimate of how much variability there is in thenormal behavior ofs endma i 1. This consideration is cru-cial because too much variability in normal would preclude

Type of Behaviorrn&sage lengthnumber of messagesmessage contentsubjectsender/receiverdifferent mailersforwardingbounced mailqueuing

#of msgs.12706244444

vacation 2total 112

Table 1. Types and number of mail messagesused to generate the normal database ‘forsendmail.

detecting anomalies. In the worst case, if all possible se-quences of length 6 show up as legal normaI behavior, thennc] anomalies could ever be detected. A related question ishow much normrd behavior shotdd be sampled to providegood coverage of the set of allowable sequences. We usedthe following procedure to build the normal database:2

1.

2.

3.

4.

Enumerate potential sources of variation for normalsendraai 1 operation.

Generate example mail messages that causes endmai 1 to exhibit these variations.

Build a normal database from the sequences producedby Step 2.

Continue generating normal mail messages, recordingall mismatches and adding them to the normal databaseas they occur.

We considered variations in message length, numberof messages, message content (text, binary, encoded, en-crypted), message subject line, sender/receiver and mailers.We also looked at the effects of forwardhtg, bounced mailand queuing. Lastly, we considered the effects of all thesevariations in the cases of remote and local delivery. For eachtest, we generated three databases, one for each differentwindow size (5, 6 and 11). Each database incorporates allof the features described above, producing zero mismatchesfor mail with any of these features.Table 1 shows how many messages of each type were

used to generate the normal databases. We began with mes-sage length and tried 12 different message lengths, rangingfrom 1 line to 300,000 bytes. From this, we selected the

@re fonowd a similmprocedureto generatethe normaldatabaseforl?r andobtaineda databaseof 534normalpatterns.

123

Page 20: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

2000

1800

1600

1400

600

400

200

00 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000

#of System Cslls

Figure 1. Building a normal database. The graph shc~wshow many new patterns are added to thedatabase over time. By running our artificially constructed set of standard messages, a wide varietyof normal behavior is seen in the early part of the run (out to about 3000 system calls). After thistime, virtually no new patterns are encountered under normal sendmail conditions. These data areaconcatenation of the logs used to generate our normal database.

attempts that failed, and traces of error conditions. Ineach of these cases, we compared the trace with the nor-mals endraa i 1 database and recorded the number of mis-matches. In addhion, we tested one successful lpr intrusionand compared its trace with a normal database for lpr. Ta-ble 3 shows the results of these comparisons. Each row inthe table reports data for one typical trace. Inmost cases, wehave conducted multiple runs of the intrusion with identicalor nearly identical results.

To date, we have been able to execute and trace fourattacks: sunsendmai lcP [1], a syslog attack script [2, 7],a decode alias attack, and lprcp [3].

The sunsendmai lcp script uses a special commandline option to cause senchnai 1 to append an email messageto a file. By using this script on a file such as /. rhosts,a local user may obtain root access.

The syslog attack uses the syslog interface to overtlow abuffer in sendmai 1. A message is sent to the sendmailon the victim machine, causing it to log a very long, speciallycreated error message. The log entry overilows a buffer

in sendmai 1, replacing part of the sendmai 1‘s runningimage with the attacker’s machine code. The new code isthen executed, causing the standard I/O of a root-owned shellto be attached to a port. The attacker may then attach to thispc)rt at her leisure. This attack can be run either locally orremotely, and we have tested both modes. We also variedthe number of commands issued as root after a successfulattack.

In older sendmai 1 installations, the alias databasecontains an entry called “decode,” which resolves touudecode, a UNIX program that converts a binary fileerlcoded in plain text into its original form and name.uudecode respects absolute filenames, so if a file “bar.uu”says that the original tile is “/home/foo/.rhosts,” then whenuudecode is given “bar.uu,” it will attempt to create foo’s. rhos ts tile. sendmai 1 will generally run uudecodeas the semi-privileged user daemon, so email sent to decodecannot overwrite any file on the system; however, if a file isw orld-writable, the decode alias entry allows these files tobe modified by a remote user.

125

TracesmitLookahead:Evaluation(4)EinflussverschiedenerParameter• Einige deranalysierten Parameterhaben nur geringen oder

keinen Einfluss aufdas“normale”Verhalten:• Anzahl Nachrichten• Inhalt derNachrichten• Betreffzeile• Absender/Empfänger• Warteschlangen

• Datenbankgrößestabil nach ca.3000erfassten Systemaufrufen

MARE11– Verhaltensanalyse 20

Page 21: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Evaluation(5)IstdasaufgezeichneteVerhalteneindeutig fürsendmail?Untersuchung,ob andere Unix-Prozesse gleiche Systemaufruf-Folgen aufweisen

SignifikanteAnzahl vonabweichendenFolgen• ~5–32%für Folgen

derLänge 6• Klar(?):andere

Prozesse führenandere Aktionenals sendmail durch

MARE11– Verhaltensanalyse 21

shortest length that produced the most varied pattern of sys-tem calls (50,000 bytes), and then used that as the standardmessage length for the remaining test messages. Similarly,with the number of messages in a sendmai 1 run, we firstsent 1 message and traced sendraai 1 then we sent 5 mes-sages, tracing sendmai 1, and so forth, up to 20messages.This was intended to test sendraail’s response to burstsof messages. We tested message content by sending mes-sages containing ascii text, uuencoded data, gzipped data,and a pgp encrypted file. In each case, a number of vari-ations was tested and a single default was selected beforemoving on to the next stage. These messages constitutedour corpus of normal behavior. We reran this set of stan-dard messages on each different OS and sendraai 1. c fvariant that we tried, thus generating a normal database thatwas tailored to the exact operating condhions under whichsendmai 1 was running. Of the features considered, thefollowing seemed to have little or no effecti the number ofmessages, message content, subject line, senders/receivers,mailers and queuing. ‘IWOmore unusual features, forwardedmail and bounced mail, affected remote traces far less thanlocal traces.

Figure 1 shows how new patterns are added to thedatabase over time during a normal sendraail run. Thedata shown are for 10,000 system calls worth of behavior,but we have also performed runs out to 1.5 million systemcalls (data not shown), with essentially zero mismatches.Overall, the variability in the behavior of sendma~l at thesystem call level is much smaller than we expected.

Finally, we ask what percentage of the total possiblepatterns (for sequences of length 6) is covered by the nor-mal database. For example, if the database is completelyfull (all possible patterns have been recorded as normal)by 3000 system calls, then it would hardly be surprisingthat no new patterns are seen over time. However, as wediscussed earlier, such variability would be useless for iden-tifying anomalous behavior. Consequently, the goal is tofind a database that is small with respect to the space ofpossible patterns. Our initial data here are encouraging. Weestimate that thes endraai 1 database described above cov-ers about 5 x 10-5% of the total possible patterns of systemcalls (that is, sequences built from all possible system calls,about 180 for Unix, not just those invoked by sendraai 1),an extremely small fraction. This figure is somewhat mis-leading, however, because it is unlikely that the sendmai 1program is capable of generating many of these sequences.The most accurate comparison would be against a databasethat contained all the patterns that sendraai 1 could possi-bly produce. This would require a detailed analysis of thesendmai 1 source code, an area of future investigation.

Processsendmail1s.1s -1Is -apsps -Uxfingerpingftppinehttpd

5%#0.0 06.9 2330.0 2396.7 231.2 350.8 454.6 2113.5 5628.8 45025.4 15224.3 310

6%#0,0 08.9 3432.1 3048.3 348.3 2828.1 5644.9 2714.2 7031.5 58727.6 19844.8 436

11%#0.0 013.9 9338.0 64013.4 9313.0 80412.9 16415.7 5415.5 13135.1 118230.0 39314.7 824

Table 2. Distinguishing sendmail from otherprocesses. Each column lists two numbers:the percentage of abnormal sequences (la-beled $4.) and the number of abnormal se-quences (labeled #) in one typical trace ofeach process (when compared against thenormal database for sendmail). The columnslabeled 5, 6 and 11 refer to the sequencelength (window size) used for analysis. Thesendmail data show no misses, becausesendmail is being compared against its owndatabase.

4.2 Distinguishing Between Processes

To determine how the behavior of serdnail compareswith that of other processes, we tested several common pro-cesses against the normal sendraai 1 database with 1500entries. Table 2 compares normal traces of several com-mon processes with those of sendraai 1. These processeshave a significant number of abnormal sequences, approx-imately, 5-32?40 for sequences of length 6, because the ac-tions they perform are considerably different from thoseof sendmai 1. We also tested the normal database forlpr and achieved similar results (data not shown). lprshows even more separation than that shown in Figure 2,presumably because it is a smaller program with more lim-ited behavior. These results suggest that the behavior ofdifferent processes is easily distinguishable using sequenceinformation alone.

4.3 Anomalous Behavior

We generated traces of three types of behavior that dif-fer from that of normal sendmai 1: traces of success-ful sendraail intrusions, traces of sendraai 1 intrusion

124

Page 22: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Evaluation(6)KannabweichendesVerhalten festgestelltwerden?Angriff aufsendmail über verschiedene Sicherheitslücken:• sunsendmailcp: verwendet sendmail-Option,dieeineMailan

eine Datei anhängt.Kann wichtige Systemdateienabändern(hier:/.rhosts für Fernzugriff =>Shellmit root-Rechten)

• syslogattackscript:Ausnutzen eines Fehlers im syslog- interfacezur Erzeugung eines Pufferüberlaufs insendmail

• decodealiasattack:DecodierungvonAttachmentsüberexternes Programm uudecode.Diesesakzeptiert absolutePfadnamen inuuencodeterDatei• Wenn Datei “bar.uu”als Originalpfad “/home/foo/.rhosts”

angibt,wird diese Datei angelegt oder überschrieben

MARE11– Verhaltensanalyse 22

Page 23: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:Evaluation(7)Analyse verschiedener anomaler Situationen:• Erfolgreiches Eindringen (sunsendmailcp,syslog,decode,Iprcp)• Erfolglose Versuche

(sm565aundsm5x)• Sicherheitslücken

waren bereitsgepatcht

• Seltene Fehler(forward-Schleife)

MARE11– Verhaltensanalyse 23

AnomalysunsendmailcpSysiog:remote 1remote 2local 1local 2

decodelprcpsm565asm5xforward 100P

5%#3.8 72

3.9 3611.4 1113.0 2354.1 3070.3 211.1 70.4 271.4 1101.6 43

6%#4.1 95

4.2 4701.5 1374.2 3983.4 3090.3 241.4 120.4 361.7 1571.8 58

11%#5.2 215

5.1 10471.7 2864.0 6885.3 8830.3 572.2 310.6 892.7 4532.3 138

Table 3. Detecting Anomalies. The tableshows the results of tracing sendmail and Iprduring various anomalous situations: suc-cessful intrusions (sunsendmailcp, syslog,decode, and Iprcp), unsuccessful intrusions,(sm565a and sm5x), and abnormal errors (for-ward loop). The data for the syslogd at-tack show the results of tracing sendmail(rather than tracing syslogd itself). The %column indicates the percentage of abnormalsequences in one typical intrusion, and the# column indicates the number of abnormalsequences.

The lprcp attack script uses lpr to replace the contentsof an arbitrary file with those of another. This exploit usesthe fact that older versions of lpr use only 1000 differentnames for printer queue files, and they do not remove theold queue files before reusing them. The attack consists ofgetting lpr to place a symbolic link to the victim file in thequeue, incrementing lpr’s counter 1000 times, and thenprinting the new file, overwriting the victim file’s contents.The results for these four attacks are shown in Table

3. The sunsendmai,lcp exploit is clearly detected with5.2% anomalous sequences (for length 11). Likewise, thesyslog attack is clearly detected in every run, with theanomalous sequence rate varying between 1.7% and 5.3Y0,for a sequence window of 6. The decode attack is lessdetectable at 0.3%, and the lpr attack is detected at 2.2%.A second source of anomalous behavior comes from un-

successful intrusion attempts. We tested two remote attackscripts, called sm56 5a and sm5x [5, 6]. SunOS 4.1.4 haspatches that prevent these particular intrusions. The resultsare shown in Table 3. Overall, the percentage of abnor-mal sequences is on the low end of the range for successfulattacks.Error conditions provide a third source of anomalous

behavior. In general, it would be desirable if error conditionsproduced less deviation from normal than intrusions butwere still detectable. For the one case we have studied, alocal forwarding loop, this is what we observed (excludingthe decode and lpr exploits). A forwarding loop occurs whena set of $HOME /. forward files forma logical circle. Weconsidered the simplest case, with the following setup:

Email address ! . forward filefoo@hostl bar@host2bar@host2 foo @hostl

Although forwarding loops are not malicious, they can ad-versely affect machine performance, as hundreds of mes-sages are bounced from machine to machine. Results arereported in Table 3. They differ from normal by a small, yetclear, percentage (2.3Yo).

5 Discussion

These preliminary experiments suggest that short se-quences of system calls define a stable signature that candetect some common sources of anomalous behavior insendxnai 1 and lpr. Because our measure is easy to com-pute and is relatively modest in storage requirements, itcould be plausibly implemented as an on-line system, inwhich the kernel checked each system call made by pro-cesses running as root. Under this scheme, each site wouldgenerate its own normal database, based on the local soft-warehrdware configuration and usage patterns. This couldbe achieved either with a standard set of artificial messages,such as those we use to build our normal database, or itcould be completely determined by local usage patterns, Itis likely that some combination of the two would be mosteffective.The data reported in this paper are preliminary. In ad-

dition to testing other processes, especially those that arecommon routes for intrusion, we would like to extend oursendmai. 1 experiments in several ways. These include:testing additional senclmai 1 exploits, conducting system-atic runs on common sendmai 1 and senclmai 1. c f vari-ants, and testing the effect of other system configurations onthe normal behavior of sendmai 1. Another area for fur-ther study is the database of normal behavior, for example,how do we choose what behavior to trace? This is espe-cially relevant for s endma i 1 because its behavior is sovaried. If we fail to capture all the sources of legal varia-tion, then we will be subject to false positives. On the otherhand, if we allow different databases at different sites, thensome variation would be desirable both as customizationsto local condhions and to satisfy the uniqueness principlestated earlier. Finally, we would like to study the normalbehavior of sendmail running on a regularly used mailserver. Such real-world data would help confirm the nature

126

AnomalysunsendmailcpSysiog:remote 1remote 2local 1local 2

decodelprcpsm565asm5xforward 100P

5%#3.8 72

3.9 3611.4 1113.0 2354.1 3070.3 211.1 70.4 271.4 1101.6 43

6%#4.1 95

4.2 4701.5 1374.2 3983.4 3090.3 241.4 120.4 361.7 1571.8 58

11%#5.2 215

5.1 10471.7 2864.0 6885.3 8830.3 572.2 310.6 892.7 4532.3 138

Table 3. Detecting Anomalies. The tableshows the results of tracing sendmail and Iprduring various anomalous situations: suc-cessful intrusions (sunsendmailcp, syslog,decode, and Iprcp), unsuccessful intrusions,(sm565a and sm5x), and abnormal errors (for-ward loop). The data for the syslogd at-tack show the results of tracing sendmail(rather than tracing syslogd itself). The %column indicates the percentage of abnormalsequences in one typical intrusion, and the# column indicates the number of abnormalsequences.

The lprcp attack script uses lpr to replace the contentsof an arbitrary file with those of another. This exploit usesthe fact that older versions of lpr use only 1000 differentnames for printer queue files, and they do not remove theold queue files before reusing them. The attack consists ofgetting lpr to place a symbolic link to the victim file in thequeue, incrementing lpr’s counter 1000 times, and thenprinting the new file, overwriting the victim file’s contents.The results for these four attacks are shown in Table

3. The sunsendmai,lcp exploit is clearly detected with5.2% anomalous sequences (for length 11). Likewise, thesyslog attack is clearly detected in every run, with theanomalous sequence rate varying between 1.7% and 5.3Y0,for a sequence window of 6. The decode attack is lessdetectable at 0.3%, and the lpr attack is detected at 2.2%.A second source of anomalous behavior comes from un-

successful intrusion attempts. We tested two remote attackscripts, called sm56 5a and sm5x [5, 6]. SunOS 4.1.4 haspatches that prevent these particular intrusions. The resultsare shown in Table 3. Overall, the percentage of abnor-mal sequences is on the low end of the range for successfulattacks.Error conditions provide a third source of anomalous

behavior. In general, it would be desirable if error conditionsproduced less deviation from normal than intrusions butwere still detectable. For the one case we have studied, alocal forwarding loop, this is what we observed (excludingthe decode and lpr exploits). A forwarding loop occurs whena set of $HOME /. forward files forma logical circle. Weconsidered the simplest case, with the following setup:

Email address ! . forward filefoo@hostl bar@host2bar@host2 foo @hostl

Although forwarding loops are not malicious, they can ad-versely affect machine performance, as hundreds of mes-sages are bounced from machine to machine. Results arereported in Table 3. They differ from normal by a small, yetclear, percentage (2.3Yo).

5 Discussion

These preliminary experiments suggest that short se-quences of system calls define a stable signature that candetect some common sources of anomalous behavior insendxnai 1 and lpr. Because our measure is easy to com-pute and is relatively modest in storage requirements, itcould be plausibly implemented as an on-line system, inwhich the kernel checked each system call made by pro-cesses running as root. Under this scheme, each site wouldgenerate its own normal database, based on the local soft-warehrdware configuration and usage patterns. This couldbe achieved either with a standard set of artificial messages,such as those we use to build our normal database, or itcould be completely determined by local usage patterns, Itis likely that some combination of the two would be mosteffective.The data reported in this paper are preliminary. In ad-

dition to testing other processes, especially those that arecommon routes for intrusion, we would like to extend oursendmai. 1 experiments in several ways. These include:testing additional senclmai 1 exploits, conducting system-atic runs on common sendmai 1 and senclmai 1. c f vari-ants, and testing the effect of other system configurations onthe normal behavior of sendmai 1. Another area for fur-ther study is the database of normal behavior, for example,how do we choose what behavior to trace? This is espe-cially relevant for s endma i 1 because its behavior is sovaried. If we fail to capture all the sources of legal varia-tion, then we will be subject to false positives. On the otherhand, if we allow different databases at different sites, thensome variation would be desirable both as customizationsto local condhions and to satisfy the uniqueness principlestated earlier. Finally, we would like to study the normalbehavior of sendmail running on a regularly used mailserver. Such real-world data would help confirm the nature

126

Forward-Schleife:

Page 24: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

TracesmitLookahead:EinschränkungenAnalysedurchLookahead leidetunterBeschränkungen:• Nur ein (kleiner)Teilaspekt desProzessverhaltens betrachtet• Nur dieSystemaufrufe ansich werden aufgezeichnet• Keine ParameterderAufrufe• Kein Zeitverhalten• Keine Analyse vonzwischen denSystemaufrufen

ausgeführten Befehlsfolgen• …

• DennochbereitssoguteErgebnisseerzielbar

MARE11– Verhaltensanalyse 24

Page 25: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

AngriffaufTrace-basierteMethoden:MimikriIdee:Einfügenvielersinnloser(undfunktionsloser)Systemaufrufe• Verwirrungstiften...• Einfügenvon“unwirksamen”System-

aufrufen:AufrufeohneSeiteneffektedurchIgnorierenvonRückgabewertenoderManipulationvonParametern

• ErmöglichtesdemAngreifer,eineAngriffsfolgeinnerhalbeiner„legalen“Folgezuverbergen,indemmit„unwirksamen“Aufrufenaufgefülltwird

• ErfordertdetaillierteKenntnissedesVerhaltensundderverwendetenAnalysemethode

MARE11– Verhaltensanalyse 25

0 200 400 600 800 1000Number of System Calls

0.0

0.2

0.4

0.6

0.8

1.0

Nor

mal

ized

Ano

mal

y Si

gnal

!

Figure 3. Anomaly signal of the syslogd in-

trusion. (Reprinted from [25].)

Shorter sequences are good because they result in morecompact normal profiles, faster learning times, and lessoverhead during sequence matching. However, short se-quences can potentially be more easily evaded (see section4) and give less clear signals of an attack. A good mini-mal length was found to be 6 system calls [25], althoughfor implementation reasons our later work used 8. Even atsuch short sequence lengths, attacks were usually obviousbecause they consisted of temporally clumped anomalies,as shown in Figure 3. In this figure, the x-axis representstime (in units of system calls) and the y-axis is the normal-ized number of recently seen anomalous system calls.

Many of the detected anomalies were not malicious. Forexample, the method detected errors such as forwardingloops, failed print jobs, and system misconfigurations. Thisillustrated one additional benefit of anomaly detection: Itcan be used to detect faults caused by non-malicious errors.This contrasts with a signature detection system, which usu-ally has only the ability to detect known malicious events.

4 Subverting system call monitoring

Because most security properties of current software sys-tems and algorithms cannot be proven, advances in secu-rity have long relied upon researchers studying systems andfinding security vulnerabilities in them. Mimicry attackswere the earliest attempt to defeat the system call modelingapproach. Wagner and Dean proposed that it was possibleto craft sequences of system calls that exploited an attack,but appeared normal [74]. The trick to achieving this in-volves inserting “nullified” system calls, i.e. calls that haveno effect, either because the return values are ignored orthe parameters are manipulated. This enables an attacker toconstruct an attack sequence within a legitimate sequenceusing the “nullified” calls as padding. The mimicry has topersist as long as the attacker is exploiting the process that isbeing monitored, even once the initial penetration has suc-ceeded. See Figure 4.

read() write() close() munmap() sigprocmask() wait4()

sigprocmask() sigaction() alarm() time() stat() read()

alarm() sigprocmask() setreuid() fstat() getpid()

time() write() time() getpid() sigaction() socketcall()

sigaction() close() flock() getpid() lseek() read()

kill() lseek() flock() sigaction() alarm() time()

stat() write() open() fstat() mmap() read() open()

fstat() mmap() read() close() munmap() brk() fcntl()

setregid() open() fcntl() chroot() chdir() setreuid()

lstat() lstat() lstat() lstat() open() fcntl() fstat()

lseek() getdents() fcntl() fstat() lseek() getdents()

close() write() time() open() fstat() mmap() read()

close() munmap() brk() fcntl() setregid() open() fcntl()

chroot() chdir() setreuid() lstat() lstat() lstat()

lstat() open() fcntl() brk() fstat() lseek() getdents()

lseek() getdents() time() stat() write() time() open()

getpid() sigaction() socketcall() sigaction() umask()

sigaction() alarm() time() stat() read() alarm()

getrlimit() pipe() fork() fcntl() fstat() mmap() lseek()

close() brk() time() getpid() sigaction() socketcall()

sigaction() chdir() sigaction() sigaction() write()

munmap() munmap() munmap() exit()

Figure 4. Sequence of system calls in a

mimicry attack against wuftpd. The under-

lined calls are part of the attack, all the rest

are nullified calls. [75]

However, there are limitations to such “nullified”mimicry attacks. First, the attacker needs to be able to injectthe code containing the specially crafted sequence, whichlimits these mimicry attacks to only those that can exploitcode-injection attacks, such as buffer overflows. Second,the diversity of normal profiles on different systems is a bar-rier because the attacker requires precise knowledge of thenormal profile [75]. To what degree this defeats mimicry inpractice has not been thoroughly investigated, but it is worthrecalling that the identical program in two different produc-tion environments produced normal profiles with only 29%of sequences in common (see section 3.2). This reduces theprobability that a mimicry sequence crafted for one instal-lation would work in others. Third, the mimicry attack re-quires injecting a potentially long sequence of code, whichmay not be possible in all vulnerabilities. The examplegiven in [74] (shown in Figure 4) requires an additional 128nullified calls to hide an attack sequence of only 8 systemcalls. Finally, mimicry attacks may be difficult to imple-ment in practice because of the anomalies generated by the“preamble” of such attacks [35].

However, mimicry attack strategies have become in-creasingly sophisticated, using automated attack methodsincluding model checking [21], genetic algorithms [34], andsymbolic code execution [41]. Although these approachesmay not always be reliable in practice, work on persistentinterposition attacks shows that the application itself can be

Angriff aufwu-ftpd:Nur unterstricheneSyscalls sind Teil desAngriffs

D.WagnerandD.Dean,“Intrusiondetectionviastaticanalysis”, IEEESymposiumonSecurityandPrivacy2001

Page 26: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Angriff:KurzeTracesIdee:Mindestlängev.TracesfürwirksameErkennungnotwendig• VerwendungsehrkurzerTraces• Mindest-Tracelängeunterschritten=>nichterkennbar• Frage:welchesinnvolleFunktionalitätlässtsichinkurzenAufruffolgen

realisieren?

MARE11– Verhaltensanalyse 26

K.TanandR.Maxion,“"Why6?"Definingtheoperationallimitsofstide,ananomaly-basedintrusiondetector”,IEEESecurityandPrivacy2002

Page 27: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

BewertungderVirenanalyseansätze

Signaturbasiert• EinfachestatischeMethode• Signaturenmüssenaktuellsein:neueVirennichterkannt• PolymorpheVirenumgeheneinfacheSignaturchecks• KomplexeCheckszurLaufzeitsehraufwendig(Entschlüsseln...)

Verhaltensbasiert• ErfolgreichsterAnsatz:TracesvonSystemaufrufen• Definitioneines„normalen“Verhaltens:wasistAbweichung?• Effizienzte AuswertungzurLaufzeit• GenaueUrsache(welchesVirus?)desProblemsnichtbekannt

MARE11– Verhaltensanalyse 27

Page 28: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Fazit

VerhaltensbasierteAnalysen• AufwandzurLaufzeit• EinfacheMuster(Systemaufrufe)bereitssehrnützlich• KomplexereAnalysen=>nächsteVorlesung

• 100%zuverlässigeVirenerkennungistunmöglich!• SiehePapervonEvans

MARE11– Verhaltensanalyse 28

Page 29: Malware-Analyse und Reverse Engineering€¦ · explanation, formal works led by Filiol [ 12]underlinethe ease of signature extraction by a simple black box analysis. This extraction

Referenzen

1. G.Jacob,H.Debar,E.Filiol,“Behavioraldetectionofmalware:Fromasurveytowardsanestablishedtaxonomy”,JournalinComputerVirology4(3):251-266,August2008• Überblick über >50Verhaltensanalysenaus ForschungundIndustrie

2. S.Forrest,S.A.Hofmeyr,A.Somayaji andT.A.Longstaff,“AsenseofselfforUnixprocesses”,Proceedings1996IEEESymposiumonSecurityandPrivacy,Oakland,CA,1996,pp.120-128• Erste Ideen zur Verhaltensanalyse vonUnix-Prozessen (+Folgepapers)

3. D.Evans,“OntheImpossibilityofVirusDetection”,https://www.cs.virginia.edu/~evans/virus/• Theoretisches Paper,daszeigt,dass Viruserkennungeigentlich

unmöglich ist…4. C.Percival,“Cachemissingforfunandprofit”,BSDCan2005,Ottawa

MARE11– Verhaltensanalyse 29