<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Out Of The Box</title>
	<atom:link href="http://buffer.antifork.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://buffer.antifork.org/blog</link>
	<description></description>
	<lastBuildDate>Sun, 22 Aug 2010 18:27:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>PHoneyC DOM Emulation – Browser Personality</title>
		<link>http://buffer.antifork.org/blog/2010/08/22/phoneyc-dom-emulation-%e2%80%93-browser-personality/</link>
		<comments>http://buffer.antifork.org/blog/2010/08/22/phoneyc-dom-emulation-%e2%80%93-browser-personality/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 14:52:25 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[PhoneyC]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=327</guid>
		<description><![CDATA[A new improvement in PHoneyC DOM emulation code was committed in SVN r1624. The idea is to better emulate the DOM behaviour depending on the selected browser personality. Let&#8217;s take a look at the code starting from the personalities definition in config.py. 39 UserAgents = [ 40     (1, 41      "Internet Explorer 6.0 (Windows 2000)", 42      [...]]]></description>
			<content:encoded><![CDATA[<p>A new improvement in PHoneyC DOM emulation code was committed in SVN <a href="http://code.google.com/p/phoneyc/source/detail?r=1624" target="_blank">r1624</a>. The idea is to better emulate the DOM behaviour depending on the selected browser personality. Let&#8217;s take a look at the code starting from the personalities definition in <em>config.py</em>.</p>
<p><span style="color: #ff9900;">39 UserAgents = [<br />
40     (1,<br />
41      "Internet Explorer 6.0 (Windows 2000)",<br />
42      "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",<br />
43      "Mozilla",<br />
44      "Microsoft Internet Explorer",<br />
45      "4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",<br />
46      "ie60",<br />
47     ),<br />
48     (2,<br />
49      "Internet Explorer 6.1 (Windows XP)",<br />
50      "Mozilla/4.0 (compatible; MSIE 6.1; Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",<br />
51      "Mozilla",<br />
52      "Microsoft Internet Explorer",<br />
53      "4.0 (compatible; MSIE 6.1; Windows XP; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",<br />
54      "ie61",<br />
55     ),<br />
56     (3,<br />
57      "Internet Explorer 7.0 (Windows XP)",<br />
58      "Mozilla/4.0 (Windows; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",<br />
59      "Mozilla",<br />
60      "Microsoft Internet Explorer",<br />
61      "4.0 (Windows; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)",<br />
62      "ie70",<br />
63     ),<br />
64     (4,<br />
65      "Internet Explorer 8.0 (Windows XP)",<br />
66      "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; (R1 1.5); .NET CLR 1.1.4322; .NET CLR 2.0.50727)",<br />
67      "Mozilla",<br />
68      "Microsoft Internet Explorer",<br />
69      "4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; (R1 1.5); .NET CLR 1.1.4322; .NET CLR 2.0.50727)",<br />
70      "ie80",<br />
71     ),<br />
72 ]</span></p>
<p><span style="color: #ff9900;">I</span>t&#8217;s important to realize that each personality was added a tag (i.e. <em>ie80</em>). Taking a look at <em>DOM/Window.py</em> the following code can be seen.</p>
<p><span style="color: #ff9900;">229     def __init_methods(self):<br />
230         for attr in dir(self):<br />
231             prefix = &#8220;_Window__window_%s_&#8221; % (config.browserTag, )<br />
232             if attr.startswith(prefix):<br />
233                 p = attr.split(prefix)[1]<br />
234                 self.__dict__['__cx'].add_global(p, getattr(self, attr))<br />
235                 self.__dict__['__cx'].execute(&#8220;window.%s = %s;&#8221; % (p, p, ))</span></p>
<p>Let&#8217;s consider an example and assume the Internet Explorer 8.0 personality was selected. It&#8217;s easy to realize that the prefix would assume the value <em>_Window__window_ie80_.</em> A few simple wrappers were created, one per personality, to each method as shown in the following code.</p>
<p><span style="color: #ff9900;">340     def __window_back(self):<br />
341         &#8220;&#8221;"<br />
342         Returns the window to the previous item in the history.<br />
343         Syntax<br />
344<br />
345         window.back()<br />
346<br />
347         Parameters<br />
348<br />
349         None.<br />
350         &#8220;&#8221;"<br />
351         pass<br />
352<br />
353     def __window_ie60_back(self):<br />
354         self.__window_back()<br />
355<br />
356     def __window_ie61_back(self):<br />
357         self.__window_back()<br />
358<br />
359     def __window_ie70_back(self):<br />
360         self.__window_back()<br />
361<br />
362     def __window_ie80_back(self):<br />
363         self.__window_back()<br />
364<br />
365     def __window_firefox_back(self):<br />
366         self.__window_back()</span></p>
<p>This is a quite simple situation but what if you want to define <em>addEventListener </em>method just for Firefox personalities and <em>attachEvent </em>just for Internet Explorer ones? Really simple to do!</p>
<p><span style="color: #ff9900;">1191     def __window_attachEvent(self, sEvent, fpNotify):<br />
1192         if dataetc.isevent(sEvent, &#8216;window&#8217;):<br />
1193             self.__dict__[sEvent] = fpNotify<br />
1194<br />
1195     def __window_ie60_attachEvent(self, sEvent, fpNotify):<br />
1196         self.__window_attachEvent(sEvent, fpNotify)<br />
1197<br />
1198     def __window_ie61_attachEvent(self, sEvent, fpNotify):<br />
1199         self.__window_attachEvent(sEvent, fpNotify)<br />
1200<br />
1201     def __window_ie70_attachEvent(self, sEvent, fpNotify):<br />
1202         self.__window_attachEvent(sEvent, fpNotify)<br />
1203<br />
1204     def __window_ie80_attachEvent(self, sEvent, fpNotify):<br />
1205         self.__window_attachEvent(sEvent, fpNotify)<br />
1206<br />
1207<br />
1208     def __window_detachEvent(self, sEvent, fpNotify):<br />
1209         if sEvent in self.__dict__ and self.__dict__[sEvent] == fpNotify:<br />
1210             del self.__dict__[sEvent]<br />
1211<br />
1212     def __window_ie60_detachEvent(self, sEvent, fpNotify):<br />
1213         self.__window_detachEvent(sEvent, fpNotify)<br />
1214<br />
1215     def __window_ie61_detachEvent(self, sEvent, fpNotify):<br />
1216         self.__window_detachEvent(sEvent, fpNotify)<br />
1217<br />
1218     def __window_ie70_detachEvent(self, sEvent, fpNotify):<br />
1219         self.__window_detachEvent(sEvent, fpNotify)<br />
1220<br />
1221     def __window_ie80_detachEvent(self, sEvent, fpNotify):<br />
1222         self.__window_detachEvent(sEvent, fpNotify)<br />
1223<br />
1224<br />
1225     def __window_addEventListener(self, type, listener, useCapture = False):<br />
1226         if dataetc.isevent(type, &#8216;window&#8217;):<br />
1227             self.__dict__[type] = listener<br />
1228<br />
1229     def __window_firefox_addEventListener(self, type, listener, useCapture = False):<br />
1230         self.__window_addEventListener(type, listener, useCapture = False)<br />
1231<br />
1232<br />
1233     def __window_removeEventListener(self, type, listener, useCapture = False):<br />
1234         if type in self.__dict__ and self.__dict__[type] == listener:<br />
1235             del self.__dict__[type]<br />
1236<br />
1237     def __window_firefox_removeEventListener(self, type, listener, useCapture = False):<br />
1238         self.__window_removeEventListener(type, listener, useCapture = False)</span></p>
<p>Moreover this approach could allow to insert specific code within the wrappers if needed while implementing the method functionalities in the higher level <em>__window_&lt;method_name&gt;</em> wrapper.</p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/08/22/phoneyc-dom-emulation-%e2%80%93-browser-personality/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another great step forward</title>
		<link>http://buffer.antifork.org/blog/2010/08/11/another-great-step-forward/</link>
		<comments>http://buffer.antifork.org/blog/2010/08/11/another-great-step-forward/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 13:53:49 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[TIP]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=308</guid>
		<description><![CDATA[&#8220;Dionaea is meant to be a Nepenthes successor, embedding Python as scripting language, using libemu to detect shellcodes, supporting IPv6 and TLS&#8221; (taken from Dionaea homepage). Besides being the most interesting project for trapping malware exploiting vulnerabilities, Dionaea supports a really cool feature which allows it to log to XMPP services as described here. TIP [...]]]></description>
			<content:encoded><![CDATA[<p><em>&#8220;Dionaea is meant to be a Nepenthes successor, embedding Python as          scripting language, using libemu to detect shellcodes, supporting IPv6          and TLS&#8221;</em> (taken from <a href="http://dionaea.carnivore.it/" target="_blank">Dionaea homepage</a>). Besides being the most interesting project for trapping malware exploiting vulnerabilities, Dionaea supports a really cool feature which allows it to log to XMPP services as described <a href="http://dionaea.carnivore.it/#logxmpp" target="_blank">here</a>. TIP now exploits this feature receiving and storing such logs (really thanks to Markus Koetter for his help and support). Just an example of what happened today&#8230;</p>
<p>2010-08-11 10:44:21+0200 [XmlStream,client] [Malware Sample] MD5: e4736922939a028384522b17e9406474<br />
2010-08-11 10:44:21+0200 [XmlStream,client] [Malware Sample] SHA-1: 920b67cb250abdb593b1104a9922e2468b0fe252<br />
2010-08-11 10:44:21+0200 [XmlStream,client] [Malware Sample] PEHash: 40891becb5ec8780f1c5e51f3971c9fb2cc17dab</p>
<p>Another great step forward was taken. Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/08/11/another-great-step-forward/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHoneyC DOM Emulation &#8211; Window</title>
		<link>http://buffer.antifork.org/blog/2010/08/10/phoneyc-dom-emulation-window/</link>
		<comments>http://buffer.antifork.org/blog/2010/08/10/phoneyc-dom-emulation-window/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 10:55:45 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[PhoneyC]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=231</guid>
		<description><![CDATA[A few weeks ago I started reviewing the PHoneyC DOM emulation code and realized it was turning to be hard to maintain and debug due to a huge amount of undocumented (and sometimes awful) hacks. For this reason I decided it was time to patch (and sometimes rewrite from scratch) such code. These posts will [...]]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago I started reviewing the PHoneyC DOM emulation code and realized it was turning to be hard to maintain and debug due to a huge amount of undocumented (and sometimes awful) hacks. For this reason I decided it was time to patch (and sometimes rewrite from scratch) such code. These posts will describe how the new DOM emulation code will work. The patch is not available right now since I&#8217;m testing the code but plans exists to commit it in the <a href="http://code.google.com/p/phoneyc/" target="_blank">PHoneyC SVN</a> in the next days.</p>
<p>In this first post we will take a look at the Window object in DOM/Window.py. During object inizialization, the following code is executed.</p>
<p><span style="color: #ff9900;">156     def __init_context(self):<br />
157         &#8220;&#8221;"<br />
158             Spidermonkey Context initialization.<br />
159         &#8220;&#8221;"<br />
160         document = Document(self)<br />
161         self.__dict__['__cx'] = self.__dict__['__rt'].new_context(alertlist = [])<br />
162         self.__dict__['__sl'] = []<br />
163         self.__dict__['__fl'] = [document]<br />
164<br />
165         self.__init_properties(document)<br />
166         self.__init_methods()<br />
167         self.__finalize_context()</span></p>
<p>Let&#8217;s go into further details. First of all Window object properties are initialized through the __init_properties method.</p>
<p><span style="color: #ff9900;">181     def __init_properties(self, document):<br />
182         self.__dict__['__cx'].add_global(&#8216;window&#8217;, self)<br />
183         self.__dict__['__cx'].add_global(&#8216;self&#8217;  , self)<br />
184         self.__dict__['__cx'].execute(&#8220;window.window = window;&#8221;)<br />
185<br />
186         self.__dict__['__cx'].add_global(&#8216;document&#8217;, document)<br />
187         self.__dict__['__cx'].execute(&#8220;window.document = document;&#8221;)<br />
188<br />
189         self.__dict__['__cx'].add_global(&#8216;location&#8217;, document.location)<br />
190         self.__dict__['__cx'].execute(&#8220;window.location = location;&#8221;)<br />
191<br />
192         self.__dict__['__cx'].add_global(&#8220;ActiveXObject&#8221;, ActiveXObject)<br />
193<br />
194         self.__dict__['__cx'].add_global(&#8220;navigator&#8221;, Navigator())<br />
195         self.__dict__['__cx'].execute(&#8220;window.navigator = navigator;&#8221;)<br />
196<br />
197         self.__dict__['__cx'].add_global(&#8220;screen&#8221;, unknown())<br />
198         self.__dict__['__cx'].execute(&#8220;window.screen = screen;&#8221;)<br />
199<br />
200         if &#8216;top_window&#8217; in self.__dict__['__root'].__dict__:<br />
201             if self.__dict__['__referrer']:<br />
202                 top = self.__dict__['__referrer']<br />
203             else:<br />
204                 top = self.__dict__['__root'].top_window<br />
205         else:<br />
206             top = self<br />
207<br />
208         self.__dict__['__cx'].add_global(&#8220;top&#8221;, top)<br />
209         self.__dict__['__cx'].execute(&#8220;window.top = top;&#8221;)<br />
210<br />
211         self.__dict__['__cx'].add_global(&#8220;parent&#8221;, top)<br />
212         self.__dict__['__cx'].execute(&#8220;window.parent = parent;&#8221;)<br />
213<br />
214         self.__dict__['__cx'].add_global(&#8220;history&#8221;, History(document))<br />
215         self.__dict__['__cx'].execute(&#8220;window.history = history;&#8221;)<br />
216<br />
217         self.__dict__['__cx'].execute(&#8220;window.innerWidth = 400;&#8221;)<br />
218         self.__dict__['__cx'].execute(&#8220;window.innerHeight = 200;&#8221;)<br />
219<br />
220         self.__init_undefined_properties()<br />
221<br />
222     def __init_undefined_properties(self):<br />
223         properties = (&#8216;external&#8217;, &#8216;opera&#8217;, )<br />
224<br />
225         for prop in properties:<br />
226             self.__dict__['__cx'].execute(&#8220;window.%s = undefined;&#8221; % (prop, ))</span></p>
<p>The code should be straightforward to understand. The idea beyond it is really simple. Simply stated this code allows Python objects&#8217; variables and methods to be accessible from JS. Let&#8217;s move to most interesting stuff. Following the __init_methods method is called.</p>
<p><span style="color: #ff9900;">228     def __init_methods(self):<br />
229         for attr in dir(self):<br />
230             if attr.startswith(&#8216;_Window__window&#8217;):<br />
231                 p = attr.split(&#8216;_Window__window_&#8217;)[1]<br />
232                 self.__dict__['__cx'].add_global(p, getattr(self, attr))<br />
233                 self.__dict__['__cx'].execute(&#8220;window.%s = %s;&#8221; % (p, p, ))</span></p>
<p>Not so easy to understand? Let&#8217;s take a look to the definition of a method.</p>
<p><span style="color: #ff9900;">322     def __window_back(self):<br />
323         &#8220;&#8221;"<br />
324         Returns the window to the previous item in the history.<br />
325         Syntax<br />
326<br />
327         window.back()<br />
328<br />
329         Parameters<br />
330<br />
331         None.<br />
332         &#8220;&#8221;"<br />
333         pass</span></p>
<p>This is a private class method since its name starts with __.<em> &#8220;If you try to call a private method, Python will raise a slightly misleading exception, saying that the method does not exist. Of course it does exist, but it&#8217;s private, so it&#8217;s not accessible outside the class. Strictly speaking, private methods are accessible outside their class, just not easily accessible. Nothing in Python is truly private; internally, the names of private methods and attributes are mangled and unmangled on the fly to make them seem inaccessible by their given names.&#8221; </em>(taken from <a href="http://diveintopython.org/" target="_blank">Dive Into Python</a>). We can access the __window_back method of the Window class by the name _Window__window_back. This is the black magic __init_methods use for initializing methods. It&#8217;s quite easy to realize that adding a new method is really easy. All you need is to simply define a method named <em>__window_&lt;window_method_name&gt;</em> and match the signature of such method. How to emulate such method it&#8217;s up to you but a simple <em>pass </em>could do the trick.</p>
<p>The last step happens in __finalize_context method.</p>
<p><span style="color: #ff9900;">169     def __finalize_context(self):<br />
170         self.__dict__['__cx'].execute(&#8220;Event = function(){}&#8221;)<br />
171         self.__dict__['__cx'].execute(&#8220;function CollectGarbage() {};&#8221;)<br />
172         self.__dict__['__cx'].execute(&#8220;function quit() {};&#8221;)<br />
173         self.__dict__['__cx'].execute(&#8220;function prompt() {};&#8221;)<br />
174<br />
175         for clsname in dataetc.classlist:<br />
176             inits = {&#8216;window&#8217; : self,<br />
177                      &#8216;tagName&#8217;: dataetc.classtotag(clsname),<br />
178                      &#8216;parser&#8217; : None}<br />
179             self.__dict__['__cx'].add_global(clsname, DOMObjectFactory(clsname, inits))</span></p>
<p>The most interesting code is in lines 175-179. First of all let&#8217;s take a look at the DOMObjectFactory code (DOM/ClassFactory.py) which is a genuine Python hack.</p>
<p><span style="color: #ff9900;">3 class DynamicDOMObject(DOMObject):<br />
4     def __init__(self):<br />
5         self.__dict__.update(self.inits)<br />
6         DOMObject.__init__(self, self.window, self.tagName, self.parser)<br />
7<br />
8 def DOMObjectFactory(name, initializers):<br />
9     return type(name, (DynamicDOMObject,), {&#8216;inits&#8217; : initializers})</span></p>
<p>After reading Python documentation it should be easy to understand how this code works and how it&#8217;s able to dynamically add new DOM objects to the context.</p>
<p><strong><tt>type</tt></strong><big>(</big><em>name</em>, <em>bases</em>, <em>dict</em><big>)</big></p>
<dl>
<dd><em>Return a new type object.  This is essentially a dynamic form of the <a href="http://docs.python.org/reference/compound_stmts.html#class"><tt>class</tt></a> statement. The </em><em>name string is the class name and becomes the <tt>__name__</tt> attribute; the </em><em>bases tuple itemizes the base classes and becomes the <tt>__bases__</tt> attribute; and the </em><em>dict dictionary is the namespace containing definitions for class body and becomes the <tt>__dict__</tt> attribute.  For example, the following two statements create identical <a title="type" href="http://docs.python.org/library/functions.html#type"><tt>type</tt></a> objects:</em></p>
<p><em>&gt;&gt;&gt; class X(object):<br />
&#8230;     a = 1<br />
&#8230;<br />
&gt;&gt;&gt; X = type(&#8216;X&#8217;, (object,), dict(a=1))</em></p>
</dd>
<dt></dt>
<p>What about the Window event handlers? They are handled with a different mechanism which can be fully understood just by analyzing how the new DOM emulation code preparses the pages deferring code execution until the last possible moment. I&#8217;ll analyze such feature in a future post in greater detail. Right now what you have to know is that if the handler for the event <em>&lt;event&gt;</em> is set, the Window attribute <em>on&lt;event&gt;</em> is set and contains the handler code. Once you understand it, the following code in DOM/DOM.py used for event handling should be easy to understand.</p>
<p><span style="color: #ff9900;">171     def get_event_func(self, name, f):<br />
172         begin = str(f).index(&#8216;{&#8216;) + 1<br />
173         s = str(f)[begin:].split(&#8216;}&#8217;)<br />
174         script = &#8216;}&#8217;.join(s[:-1]) + s[-1]<br />
175         return script<br />
176<br />
177     def event_handler(self, window, name, f):<br />
178         if name in window.__dict__:<br />
179             try:<br />
180                 script = self.get_event_func(name, f)<br />
181                 window.__dict__['__cx'].execute(script)<br />
182             except:<br />
183                 #print str(f)<br />
184                 traceback.print_exc()<br />
185                 pass<br />
186<br />
187     def handle_events(self, window):<br />
188         window.__dict__['__warning'] = False<br />
189         self.event_handler(window, &#8216;onabort&#8217;         , window.onabort)<br />
190         self.event_handler(window, &#8216;onbeforeunload&#8217;  , window.onbeforeunload)<br />
191         self.event_handler(window, &#8216;onblur&#8217;          , window.onblur)<br />
192         self.event_handler(window, &#8216;onchange&#8217;        , window.onchange)<br />
193         self.event_handler(window, &#8216;onclick&#8217;         , window.onclick)<br />
194         self.event_handler(window, &#8216;onclose&#8217;         , window.onclose)<br />
195         self.event_handler(window, &#8216;oncontextmenu&#8217;   , window.oncontextmenu)<br />
196         self.event_handler(window, &#8216;ondragdrop&#8217;      , window.ondragdrop)<br />
197         self.event_handler(window, &#8216;onerror&#8217;         , window.onerror)<br />
198         self.event_handler(window, &#8216;onfocus&#8217;         , window.onfocus)<br />
199         self.event_handler(window, &#8216;onhashchange&#8217;    , window.hashchange)<br />
200         self.event_handler(window, &#8216;onkeydown&#8217;       , window.onkeydown)<br />
201         self.event_handler(window, &#8216;onkeypress&#8217;      , window.onkeypress)<br />
202         self.event_handler(window, &#8216;onkeyup&#8217;         , window.onkeyup)<br />
203         self.event_handler(window, &#8216;onload&#8217;          , window.onload)<br />
204         self.event_handler(window, &#8216;onmousedown&#8217;     , window.onmousedown)<br />
205         self.event_handler(window, &#8216;onmousemove&#8217;     , window.onmousemove)<br />
206         self.event_handler(window, &#8216;onmouseout&#8217;      , window.onmouseout)<br />
207         self.event_handler(window, &#8216;onmouseover&#8217;     , window.onmouseover)<br />
208         self.event_handler(window, &#8216;onmouseup&#8217;       , window.onmouseup)<br />
209         self.event_handler(window, &#8216;onmozorientation&#8217;, window.onmozorientation)<br />
210         self.event_handler(window, &#8216;onpaint&#8217;         , window.onpaint)<br />
211         self.event_handler(window, &#8216;onpopstate&#8217;      , window.onpopstate)<br />
212         self.event_handler(window, &#8216;onreset&#8217;         , window.onreset)<br />
213         self.event_handler(window, &#8216;onresize&#8217;        , window.onresize)<br />
214         self.event_handler(window, &#8216;onscroll&#8217;        , window.onscroll)<br />
215         self.event_handler(window, &#8216;onselect&#8217;        , window.onselect)<br />
216         self.event_handler(window, &#8216;onsubmit&#8217;        , window.onsubmit)<br />
217         self.event_handler(window, &#8216;onunload&#8217;        , window.onunload)<br />
218         self.event_handler(window, &#8216;onpageshow&#8217;      , window.onpageshow)<br />
219         self.event_handler(window, &#8216;onpagehide&#8217;      , window.onpagehide)<br />
220         window.__dict__['__warning'] = True</span></p>
<dd> </dd>
<dd> </dd>
<dd> </dd>
<dd> </dd>
<dd> </dd>
<dd> </dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/08/10/phoneyc-dom-emulation-window/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I love this game!</title>
		<link>http://buffer.antifork.org/blog/2010/07/22/i-love-this-game/</link>
		<comments>http://buffer.antifork.org/blog/2010/07/22/i-love-this-game/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 16:04:51 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[TIP]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=220</guid>
		<description><![CDATA[Today I was in need for fun and so I started adding a new API call which allows to check if a domain is malicious or not. The check avoids to hit the database at all but just queries the search index. The results I got are quite surprising. Take a look at it considering  [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was in need for fun and so I started adding a new API call which allows to check if a domain is malicious or not. The check avoids to hit the database at all but just queries the search index. The results I got are quite surprising. Take a look at it considering  that code 409 means &#8216;Object already exists&#8217; while code 410 means &#8216;Object does not exist&#8217;.</p>
<p>Let&#8217;s start with a benign domain not tracked by TIP.</p>
<p>buffer@alnitak ~ $ time wget http://xxxx.xxxx.xx/api/check/domain/test@@it/<br />
HTTP request sent, awaiting response&#8230; 410 GONE<br />
2010-07-22 17:46:58 ERROR 410: GONE.</p>
<p><strong>real    0m0.017s</strong><br />
<strong>user    0m0.001s<br />
sys    0m0.001s</strong></p>
<p>Now let&#8217;s move to a malicious domain tracked by TIP.</p>
<p>buffer@alnitak ~ $ time wget http://xxxx.xxxx.xx/api/check/domain/hazelpay@@ru/<br />
HTTP request sent, awaiting response&#8230; 409 CONFLICT<br />
2010-07-22 17:47:07 ERROR 409: CONFLICT.</p>
<p><strong>real    0m0.022s<br />
user    0m0.000s<br />
sys    0m0.002s</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/07/22/i-love-this-game/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Just can&#8217;t get enough!</title>
		<link>http://buffer.antifork.org/blog/2010/07/19/just-cant-get-enough/</link>
		<comments>http://buffer.antifork.org/blog/2010/07/19/just-cant-get-enough/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 14:04:35 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Botnets]]></category>
		<category><![CDATA[Fast-Flux]]></category>
		<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[TIP]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=209</guid>
		<description><![CDATA[It&#8217;s really a long time I do not post about TIP. The good news is that TIP is starting growing really fast and this is mainly due to its modular design which allows to plug different kind of tracking modules with minimum effort. In this post I&#8217;ll provide a brief overview of the new still [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s really a long time I do not post about TIP. The good news is that TIP is starting growing really fast and this is mainly due to its modular design which allows to plug different kind of tracking modules with minimum effort. In this post I&#8217;ll provide a brief overview of the new still integrated features and the upcoming ones.</p>
<p>First of all, a new TIP Collector module named <strong>Malware </strong>was integrated and currently it handles data coming from <em>GLSandbox</em>, a sandbox for automated malware analysis written by <a href="http://www.pornosecurity.org/" target="_blank">Guido Landi</a>. Other than just analyzing malware samples behavior, the idea is to collect additional data coming from such analysis too. An example of such interesting data is related to C&amp;C identification which can be automatically handled by a botnet monitoring tool for further analysis. Another example is related to information about domains which could lead to the identification of new fast-flux domains.GLSandbox code is currently not public but plans exist to release it in the next future. A <strong>search engine</strong> was integrated in TIP in the last version! The idea is to index the database in order to be able to search into it with great efficiency and performance. In order to implement it, <a href="http://haystacksearch.org/" target="_blank">Haystack</a> was used. The first tests were done using Apache Solr (deployed as Apache Tomcat application) as backend and confirm it works like a charm!  A new <strong>REST API</strong> was designed and realized in order to be able to more easily search and share data with other users and/or applications. The API was realized using <a href="http://bitbucket.org/jespern/django-piston/wiki/Home" target="_blank">Django-Piston</a> and supports OAuth authentication. Moreover the last version of TIP supports <strong>Django 1.2</strong> and stops supporting previous versions (due to some incompatible changes between versions 1.1 and 1.2) and introduces support to migrations using <a href="http://south.aeracode.org/" target="_blank">South</a> in order to more easily make changes to the database schema while developing.</p>
<p>A lot of new cool features, a lot of upcoming cool ones! Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/07/19/just-cant-get-enough/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Honeynet Project Forensic Challenge 2010/4 – “VoIP”</title>
		<link>http://buffer.antifork.org/blog/2010/06/03/honeynet-project-forensic-challenge-20104-%e2%80%93-%e2%80%9cvoip%e2%80%9d/</link>
		<comments>http://buffer.antifork.org/blog/2010/06/03/honeynet-project-forensic-challenge-20104-%e2%80%93-%e2%80%9cvoip%e2%80%9d/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 09:16:38 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=204</guid>
		<description><![CDATA[Challenge 4 of the Honeynet Project Forensic Challenge &#8211; titled &#8220;VoIP&#8221; &#8211; is now live. This challenge 4 &#8211; provided by Ben Reardon from the Australian and Sjur Eivind Usken from Norwegian Chapter &#8211; takes you into the realm of voice communications on the Internet. VoIP with SIP is becoming the de-facto standard. As this [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.honeynet.org/challenges/2010_4_voip">Challenge 4</a> of the Honeynet Project Forensic Challenge &#8211; titled &#8220;VoIP&#8221; &#8211; is now  live. This challenge 4 &#8211; provided by  Ben Reardon from the Australian  and Sjur Eivind Usken from Norwegian Chapter &#8211; takes you into the realm  of voice communications on the Internet. VoIP with SIP is becoming the  de-facto standard. As this technology becomes more common, malicious  parties have more opportunities and stronger motives to take control of  these systems to conduct nefarious activities. This Challenge is  designed to examine and explore some of attributes of the SIP and RTP  protocols.</p>
<p>Note that our Chinese speaking chapters (Julia Cheng from the  Taiwanese Chapter, Jianwei Zhuge from the Chinese Chapter and Roland  Cheung from the Hongkong Chapter) have taken great initiative and  translated the challenge into Chinese, which is available from the  simplified Chinese and traditional Chinese pages (will be posted by EOD  today.)</p>
<p>With this challenge, we are getting on a firm 2 month cycle. You will  have one month to submit (deadline is June 30th 2010) and results will  be released approximately 3 weeks later. Small prizes will be awarded to  the top three submissions.</p>
<p>Enjoy the challenge!</p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/06/03/honeynet-project-forensic-challenge-20104-%e2%80%93-%e2%80%9cvoip%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Honeynet Project Forensic Challenge 2010/3 – “Banking Troubles”</title>
		<link>http://buffer.antifork.org/blog/2010/03/28/honeynet-project-forensic-challenge-20103-%e2%80%93-%e2%80%9cbanking-troubles%e2%80%9d/</link>
		<comments>http://buffer.antifork.org/blog/2010/03/28/honeynet-project-forensic-challenge-20103-%e2%80%93-%e2%80%9cbanking-troubles%e2%80%9d/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 17:36:23 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=190</guid>
		<description><![CDATA[Honeynet Project Challenge 2010/3 &#8211; &#8220;Banking Troubles&#8221; has just been posted and is to investigate a memory image of an infected virtual machine. The challenge has been provided by Josh Smith and Matt Cote from The Rochester Institute of Technology Chapter, Angelo Dell&#8217;Aera from the Italian Chapter and Nicolas Collery from the Singapore Chapter. Submit [...]]]></description>
			<content:encoded><![CDATA[<p><a onclick="javascript:pageTracker._trackPageview('/outbound/article/honeynet.org');" href="http://honeynet.org/challenges/2010_3_banking_troubles" target="_blank">Honeynet Project Challenge 2010/3 &#8211; &#8220;Banking Troubles&#8221;</a> has just been posted and is to investigate a memory image of an infected virtual machine.  The challenge has been provided by Josh  Smith and Matt Cote from The Rochester Institute of Technology Chapter,  Angelo Dell&#8217;Aera from the Italian Chapter and Nicolas Collery from the  Singapore Chapter.</p>
<p>Submit your solution at <a href="http://www.honeynet.org/challenge2010/">http://www.honeynet.org/challenge2010/</a> by 17:00 EST, Sunday,  April 18th 2010. Results will be released on Wednesday, May 5th 2010.  Small prizes will be awarded to the top three submissions.</p>
<p>Skill Level: Difficult</p>
<p><strong>UPDATE</strong>: Submission deadline extended to Monday, 26th of April 2010</p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/03/28/honeynet-project-forensic-challenge-20103-%e2%80%93-%e2%80%9cbanking-troubles%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Honeynet Project Forensic Challenge 2010/2 &#8211; &#8220;Browsers Under Attack&#8221;</title>
		<link>http://buffer.antifork.org/blog/2010/02/17/forensic-challenge-20102-browsers-under-attack-is-now-online/</link>
		<comments>http://buffer.antifork.org/blog/2010/02/17/forensic-challenge-20102-browsers-under-attack-is-now-online/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 08:52:55 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=184</guid>
		<description><![CDATA[Challenge 2 of the Honeynet Project Forensic Challenge has just been posted. The challenge has been provided by Nicolas Collery from the Singapore Chapter and Guillaume Arcas from the French Chapter and is titled browsers under attack. Submission deadline is March 1st and results will be released on Monday, March 15th 2010. Small prizes will [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://honeynet.org/challenges/2010_2_browsers_under_attack">Challenge 2</a> of the Honeynet Project Forensic Challenge has just been posted. The challenge has been provided by Nicolas Collery from the Singapore Chapter and Guillaume Arcas from the French Chapter and is titled <strong>browsers under attack</strong>.</p>
<p>Submission deadline is March 1st and results will be released on Monday, March 15th 2010. Small prizes will be awarded to the top three submissions.</p>
<p>Have fun!</p>
<p><strong>UPDATE</strong>: Submission deadline extended to Monday, 8th of March 2010</p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/02/17/forensic-challenge-20102-browsers-under-attack-is-now-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhoneyC: A Virtual Client Honeypot</title>
		<link>http://buffer.antifork.org/blog/2010/01/29/phoneyc-a-virtual-client-honeypot/</link>
		<comments>http://buffer.antifork.org/blog/2010/01/29/phoneyc-a-virtual-client-honeypot/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 16:36:32 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[PhoneyC]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=180</guid>
		<description><![CDATA[About two months ago I started contributing PhoneyC, a pure Python honeyclient implementation originally developed by Jose Nazario. The perception is that our development efforts are moving on the right track. The code can be downloaded here. If you&#8217;re interested take a look at the different development branches and give us your feedback. Moreover if [...]]]></description>
			<content:encoded><![CDATA[<p>About two months ago I started contributing PhoneyC, a pure Python honeyclient implementation originally developed by Jose Nazario. The perception is that our development efforts are moving on the right track. The code can be downloaded <a href="http://code.google.com/p/phoneyc/" target="_blank">here</a>. If you&#8217;re interested take a look at the different development branches and give us your feedback. Moreover if you&#8217;re interested in technical details about PhoneyC please read this <a href="http://www.usenix.org/event/leet09/tech/full_papers/nazario/nazario.pdf " target="_blank">paper</a> by Jose Nazario.</p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/01/29/phoneyc-a-virtual-client-honeypot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Honeynet Project Forensic Challenge 2010</title>
		<link>http://buffer.antifork.org/blog/2010/01/13/honeynet-project-forensic-challenge-2010/</link>
		<comments>http://buffer.antifork.org/blog/2010/01/13/honeynet-project-forensic-challenge-2010/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 22:03:39 +0000</pubDate>
		<dc:creator>buffer</dc:creator>
				<category><![CDATA[Honeynet Project]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://buffer.antifork.org/blog/?p=174</guid>
		<description><![CDATA[After several years without any Honeynet Project Challenges, there will finally be new Forensic Challenges starting next Monday (January 18th, 2010). Here is the official announcement. I am very happy to announce the Honeynet Project Forensic Challenge 2010. The purpose of the Forensic Challenges is to take learning one step farther. Instead of having the [...]]]></description>
			<content:encoded><![CDATA[<p>After several years without any <a href="http://www.honeynet.org/challenges">Honeynet Project Challenges</a>, there will finally be new <a href="https://honeynet.org/node/503">Forensic Challenges</a> starting next Monday (January 18th, 2010). Here is the official announcement.</p>
<p><em>I am very happy to announce the Honeynet Project Forensic Challenge 2010. The purpose of the Forensic Challenges is to take learning one step farther. Instead of having the Honeynet Project analyze attacks and share their findings, Forensic Challenges give the security community the opportunity to analyze attacks and <a href="http://honeynet.org/papers">share their findings</a>. In the end, individuals and organizations not only learn about threats, but also learn how to analyze them. Even better, individuals can access the write-ups from other individuals, and learn about new tools and techniques for analyzing attacks. Best of all, the attacks of the Forensic Challenge are attacks encountered in the wild, real hacks, provided by our members.<br />
It has been several years since we provided Forensic Challenges and with the Forensic Challenge 2010, we will provide desperately needed upgrades. The Forensic Challenge 2010 will include a mixture of server-side attacks on the latest operating systems and services, attacks on client-side attacks that emerged in the past few years, attacks on VoiP systems, web applications, etc. At the end of challenge, we will provide a sample solution created by our members using the <a href="http://honeynet.org/project">state-of-the-art tools</a> that are publicly available, such as libemu and dionaea.<br />
The first challenge (of several for 2010) will be posted on our <a href="http://honeynet.org/challenges">Forensic Challenges web site</a> on Monday, January 18th 2010. We will be open to submissions for about two weeks and announce the winners by February 15th 2010. This year, we will also award the top three submissions with prizes! Please check the <a href="http://honeynet.org/challenges">web site</a> on Monday, January 18th 2010 for further details&#8230;</em></p>
<p><em>Christian Seifert</em></p>
]]></content:encoded>
			<wfw:commentRss>http://buffer.antifork.org/blog/2010/01/13/honeynet-project-forensic-challenge-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
