index.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. <!--
  2. /**
  3. * TraCINg-Server - Gathering and visualizing cyber incidents on the world
  4. *
  5. * Copyright 2013 Matthias Gazzari, Annemarie Mattmann, André Wolski
  6. *
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. */
  19. -->
  20. <!DOCTYPE html>
  21. <html>
  22. <head>
  23. <title>TraCINg</title>
  24. <meta charset="utf-8">
  25. <!-- load external libraries -->
  26. <!-- load jQuery, jQuery UI for datepicker and jQuery UI MultiSelect Widget for filter-->
  27. <script src="./extern/jquery/jquery.min.js"></script>
  28. <link rel="stylesheet" href="./extern/jquery/jquery-ui.css">
  29. <script src="./extern/jquery/jquery-ui.js"></script>
  30. <link rel="stylesheet" href="./extern/jquery/jquery.multiselect.css">
  31. <script src="./extern/jquery/jquery.multiselect.min.js"></script>
  32. <!-- https://github.com/Cyber-Incident-Monitor/jrange -->
  33. <link rel="stylesheet" href="./extern/jquery/ui.jrange.css">
  34. <script src="./extern/jquery/jquery.ui.jrange.js"></script>
  35. <!-- load bootstrap and responsive bootstrap -->
  36. <link href="./extern/bootstrap/bootstrap.min.css" rel="stylesheet" media="screen">
  37. <script src="./extern/bootstrap/bootstrap.min.js"></script>
  38. <link href="./extern/bootstrap/bootstrap-responsive.min.css" rel="stylesheet">
  39. <!-- highcharts -->
  40. <script src="./extern/highcharts/highcharts.js"></script>
  41. <!-- load jVectorMap -->
  42. <link rel="stylesheet" href="./extern/jvectormap/jquery-jvectormap.css" type="text/css" media="screen"/>
  43. <script src="./extern/jvectormap/jquery-jvectormap.min.js"></script>
  44. <script src="./extern/jvectormap/jquery-jvectormap-world-mill-en.js"></script>
  45. <!-- load Leaflet -->
  46. <link rel="stylesheet" type="text/css" href="./extern/leaflet/leaflet.css" />
  47. <script type="text/javascript" src="./extern/leaflet/leaflet.js"></script>
  48. <!-- load globe with three.js library -->
  49. <link rel="stylesheet" href="./extern/globe/globe.css" type="text/css" media="screen"/>
  50. <script type="text/javascript" src="./extern/globe/three.min.js"></script>
  51. <script src="./extern/globe/globe.min.js" type="text/javascript"></script>
  52. <!-- for Table View -->
  53. <!-- https://datatables.net/download/ -->
  54. <link rel="stylesheet" href="./extern/datatables/jquery.dataTables.css">
  55. <link rel="stylesheet" href="./extern/datatables/DT_bootstrap.css">
  56. <!-- http://datatables.net/blog/Twitter_Bootstrap_2 -->
  57. <script src="./extern/datatables/jquery.dataTables.min.js"></script>
  58. <script src="./extern/datatables/DT_bootstrap.js"></script>
  59. <!-- https://github.com/cowboy/jquery-throttle-debounce -->
  60. <script src="./extern/jquery/jquery.ba-throttle-debounce.min.js"></script>
  61. <!-- load internal libraries -->
  62. <script src="/socket.io/socket.io.js"></script>
  63. <script src="countryName.js" type="text/javascript"></script>
  64. <script src="map.js" type="text/javascript"></script>
  65. <script src="streetmap.js" type="text/javascript"></script>
  66. <script src="statistics.js" type="text/javascript"></script>
  67. <script src="controller.js" type="text/javascript"></script>
  68. <script src="world.js" type="text/javascript"></script>
  69. <script src="dbWindow.js" type="text/javascript"></script>
  70. <script src="help.js" type="text/javascript"></script>
  71. <script src="menu.js" type="text/javascript"></script>
  72. <script src="main.js" type="text/javascript"></script>
  73. <script src="filter.js" type="text/javascript"></script>
  74. <!-- load main.css -->
  75. <link rel="stylesheet" href="main.css">
  76. </head>
  77. <body class="navbar-offset">
  78. <!-- container for bootstrap views -->
  79. <div class="container-fluid">
  80. <noscript>
  81. <div id="dbAlert" class="alert alert-block">
  82. <button type="button" class="close" data-dismiss="alert">&times;</button>
  83. <h4>Warning!</h4>Please enable JavaScript to view this page correctly.
  84. </div>
  85. </noscript>
  86. <!-- title -->
  87. <div class="page-header" id="header" onHelpActive="help-outline">
  88. <h1><a href="#/map" style="text-decoration: none; color : #000;">TraCINg <small>Monitoring cyber incidents </a></small></h1>
  89. </div>
  90. <!-- divide page -->
  91. <div class="row-fluid">
  92. <!-- main menu part -->
  93. <div class="span12" id ="rightWin">
  94. <div class="navbar navbar-fixed-top span12" id="navMenu">
  95. <div class="navbar-inner">
  96. <div class="container">
  97. <!-- show btn-navbar on collapse -->
  98. <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
  99. <span class="icon-bar"></span>
  100. <span class="icon-bar"></span>
  101. <span class="icon-bar"></span>
  102. </a>
  103. <!-- items that will be collapsed/main menu part -->
  104. <div class="nav-collapse collapse">
  105. <ul class="nav" id="menutabs">
  106. <form class="navbar-form pull-left" id="toggleView" onHelpActive="help-outline">
  107. <button class="btn active" id="liveView">Live View</button>
  108. <button class="btn" id="dbView">Database View</button>
  109. </form>
  110. <li class="divider-vertical"></li>
  111. <li id="2DViewEntry" onHelpActive="help-outline"><a href="#/map" id="tab_map">Country View</a></li>
  112. <li id="StreetViewEntry" onHelpActive="help-outline"><a href="#/streetmap" id="tab_streetmap">Map View</a></li>
  113. <li id="3DViewEntry" onHelpActive="help-outline"><a href="#/globe" id="tab_globe">3D View</a></li>
  114. <li id="tableViewEntry" onHelpActive="help-outline"><a href="#/table" id="tab_table">Table View</a></li>
  115. <li class="divider-vertical"></li>
  116. <li id="statsEntry" onHelpActive="help-outline"><a href="#/stats" id="tab_stats">Statistics</a></li>
  117. <li class="divider-vertical"></li>
  118. <li id="helpEntry" onHelpActive="help-outline"><a href="#helpView">Help</a></li> <!-- href="#helpView" data-toggle="modal"-->
  119. <li id="aboutViewEntry" onHelpActive="help-outline"><a href="#aboutView" data-toggle="modal">About</a></li>
  120. <li class="divider-vertical" style="margin-left: 3px"></li>
  121. <form class="navbar-form pull-right">
  122. <button class="btn" id="advMarkerInfo" onHelpActive="help-outline">Advanced Marker Info</button>
  123. <button type="button" class="btn" id="resetMap" onHelpActive="help-outline" style="margin-left: 5px">Reset Data</button>
  124. </form>
  125. </ul>
  126. </div>
  127. </div>
  128. </div>
  129. </div>
  130. <!-- main body (map and config) part -->
  131. <div class="row-fluid">
  132. <!-- config part (for preferences, database content, etc.) -->
  133. <div class="span2" id="leftWin" style="display: none;">
  134. <div id="statsWin">
  135. <form>
  136. <fieldset>
  137. <legend>Statistic Views</legend>
  138. <div class="form-actions">
  139. <h3>Timeline</h3>
  140. <div class="btn-group-vertical" data-toggle="buttons-radio" style="width:100%;">
  141. <button type="button" class="btn btn-block active" onclick="loadStats('typeDate');" autocomplete="off" id="getStatstypeDate" onHelpActive="help-border">by Type</button>
  142. <button type="button" class="btn btn-block" onclick="loadStats('countryDate');" autocomplete="off" id="getStatscountryDate" onHelpActive="help-border">by Country</button>
  143. </div>
  144. </div>
  145. <div class="form-actions">
  146. <button type="button" class="btn btn-warning btn-block" autocomplete="off" id="selectStatsCountries1" onHelpActive="help-border">Filter</button>
  147. </div>
  148. </fieldset>
  149. </form>
  150. </div>
  151. <div id="dbWin">
  152. <!-- sidebar content -->
  153. <form>
  154. <fieldset>
  155. <legend>Database Search</legend>
  156. <div class="well">
  157. <span>Choose entries by day:</span>
  158. <div id="jrange" class="dates" onHelpActive="help-border">
  159. <input class="span12" type="text" autocomplete="off" />
  160. <div id="jrange-div" style="position:absolute;z-index:2;"></div>
  161. </div>
  162. <span>and press "Get Incidents" to request the data or use the filter below.</span>
  163. </div>
  164. <!-- get incident button with loading display and refresh button which resets the map -->
  165. <div class="form-actions">
  166. <button type="button" class="btn btn-warning requestButtonSize" onclick="requestAttacks();" id="getIncidents" onHelpActive="help-border">Get Incidents</button>
  167. <button type="button" class="btn btn-warning requestButtonSize" autocomplete="off" id="selectStatsCountries2" onHelpActive="help-border">Filter</button>
  168. <span class="help-block">Warning: Every request will reset the map and empty the table.</span>
  169. <div id="loadingProgressBar" onHelpActive="help-outline">
  170. <span>Loading Progress:</span>
  171. <div class="progress" style="margin-bottom: 5px;">
  172. <div id="dbProgBar" class="bar" style="width: 0%;"></div>
  173. </div>
  174. <label id="requestInfo"></label>
  175. <label id="requestSpeedInfo"></label>
  176. </div>
  177. <!-- loading control -->
  178. <!-- icons from http://glyphicons.com/ -->
  179. <div id="loadingControls">
  180. <a class="btn" id="playButton" onHelpActive="help-outline"><i class="icon-pause" style="background-image: url('./extern/bootstrap/images/glyphicons-halflings.png');"></i></a>
  181. <div id="fasterSlowerButton" class="btn-group" onHelpActive="help-outline">
  182. <a class="btn" id="slowerButton"><i class="icon-backward" style="background-image: url('./extern/bootstrap/images/glyphicons-halflings.png');"></i></a>
  183. <a class="btn" id="fasterButton"><i class="icon-forward" style="background-image: url('./extern/bootstrap/images/glyphicons-halflings.png');"></i></a>
  184. </div>
  185. <a class="btn" id="stopButton" onHelpActive="help-outline"><i class="icon-stop" style="background-image: url('./extern/bootstrap/images/glyphicons-halflings.png');"></i></a>
  186. <a class="btn" id="showAllButton" onHelpActive="help-outline">Show All</a>
  187. </div>
  188. </div>
  189. </fieldset>
  190. </form>
  191. </div>
  192. </div>
  193. <!-- map part -->
  194. <div class="span10" id="mainContent">
  195. <!-- error alert on database problems or other problems (can be seen better up here than at the bottom of the side bar) -->
  196. <div id="errorOutput" class="center"></div>
  197. <!-- include worldmap -->
  198. <div id="map" class="active center maps" LeftWinRemove="center">
  199. <div class="legend-up icon-arrow-up" rel="tooltip" title="Zoom in map (keyboard control)"></div>
  200. <div class="legend-down icon-arrow-down" rel="tooltip" title="Zoom out map (keyboard control)"></div>
  201. <div class="legend-wasd" rel="tooltip" title="Move the map (keyboard controls, only if zoomed in)">w/a/s/d</div>
  202. </div>
  203. <!-- include streetmap -->
  204. <div id="streetmap" class="center maps" LeftWinRemove="center">
  205. <div class="legend-up icon-arrow-up" rel="tooltip" title="Zoom in map (keyboard control)"></div>
  206. <div class="legend-down icon-arrow-down" rel="tooltip" title="Zoom out map (keyboard control)"></div>
  207. <div class="legend-wasd" rel="tooltip" title="Move the map (keyboard controls)">w/a/s/d</div>
  208. </div>
  209. <!-- include globe -->
  210. <div id="globe" class="center maps globe-background" LeftWinRemove="center">
  211. <div class="legend-toggle" rel="tooltip" title="Toggle heatmap (keyboard control)">t</div>
  212. <div class="legend-up icon-arrow-up" rel="tooltip" title="Zoom in globe (keyboard control)"></div>
  213. <div class="legend-down icon-arrow-down" rel="tooltip" title="Zoom out globe (keyboard control)"></div>
  214. <div class="legend-wasd" rel="tooltip" title="Move the globe (keyboard controls)">w/a/s/d</div>
  215. </div>
  216. <!-- include statistics -->
  217. <div id="stats" class="chart" style="width: 80%; display:none;"></div>
  218. <!-- include table -->
  219. <div id="table" class="center" style="display:none;">
  220. <table class="table table-striped" id="attackTable">
  221. <thead>
  222. <tr>
  223. <th>Sensor Type</th>
  224. <th>Sensor Name</th>
  225. <th>Attack Type</th>
  226. <th>Date</th>
  227. <th>Source Country</th>
  228. <th>Source City</th>
  229. <th>Source Port</th>
  230. <th>Destination Country</th>
  231. <th>Destination City</th>
  232. <th>Destination Port</th>
  233. <th>Authorized Sensor</th>
  234. <th>md5 Sum</th>
  235. <th>Log</th>
  236. </tr>
  237. </thead>
  238. <tbody>
  239. </tbody>
  240. </table>
  241. </div>
  242. </div>
  243. </div>
  244. </div>
  245. </div>
  246. </div>
  247. <!-- about view -->
  248. <div id="aboutView" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="aboutLabel" aria-hidden="true">
  249. <div class="modal-header">
  250. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  251. <h3 id="aboutLabel">About</h3>
  252. </div>
  253. <div class="modal-body">
  254. <h4>Contents</h4>
  255. <ul>
  256. <a href="#aboutTracing">The TraCINg Project</a><br />
  257. <a href="#aboutData">About the represented Data</a><br />
  258. </ul>
  259. <h4 id="aboutTracing">The TraCINg Project</h4>
  260. <p>"TraCINg" stands for "TUD Cyber Incident Monitor". "TUD" stands for "Technical University Darmstadt". The project was proposed by Emmanouil Vasilomanolakis from <a href="http://www.cased.de/">CASED</a> (Center for Advanced Security Research Darmstadt) and was implemented by Matthias Gazzari, Annemarie Mattmann and André Wolski with assistance of Andre Mougoui on the sensor part in connection to a bachelor practical. In this context we would like to thank Christian Schowalter for his voluntary support in designing the Globe part of the project.<br />
  261. The project was created for you. You and every other person who ever comes to visit this website. While the topic of this project is monitoring cyber incidents coming from sensors the substance of it is sharing information and giving you just a little imprint of the possible danger outside there - on the Internet.</p>
  262. <p>
  263. Our Project on Github: <a href="https://github.com/Cyber-Incident-Monitor">Cyber-Incident-Monitor</a>
  264. <br />
  265. Related Projects: <a href="http://www.tk.informatik.tu-darmstadt.de/de/research/secure-smart-infrastructures/hostage">Hostage Mobile Honeypot</a>
  266. </p>
  267. <h4 id="aboutData">About the represented Data</h4>
  268. <p>The data represented on this website is data collected by Sensors like Honeypots and Intrusion Detection Systems.</p>
  269. <h5>Honeypot</h5>
  270. <p>Honeypots are systems whose value lies in being probed, attacked or compromised. They can be classified with respect to the level of interaction they offer to the attacker. A low-interaction honeypot simulates network operations at the TCP/IP stack, while high-interaction honeypots are real systems that are vulnerable and heavily monitored.<br />
  271. For this project we are using a special class of low-interaction honeypots called malware-collectors. As the name implies these honeypots are targeting the detection of malware that are spreading over the Internet. Furthermore, a generic mobile low-interaction honeypot, called HosTaGe is also utilized.</p>
  272. <h5>Intrusion Detection System</h5>
  273. <p>An Intrusion Detection System monitors a host or a network for signs of intrusions manifested by malicious behavior or a violation of a security policy.</p>
  274. <h5>Attack Data</h5>
  275. <p>The recorded attacks are mostly those of malware. The unfortunate thing about malware is that it continuously spreads by searching (usually) random targets. So if you see an attack from somewhere don't make the mistake to automatically blame "these evil guys from XYZ" because they might not even know that they are attacking anyone (it might not be them but the malware on their systems). Because if your computer gets infected by malware and you connect to the Internet the malware will start attacking others from your computer. Incidentally of course it also has some very bad affect on your own computer like steal your private data, passwords and a thousand other evil things. So in fact if your computer is infected with malware (which is not very unlikely) it might be that by chance it attacks one of our sensors one day and your home town gets a nice red circle to remind you of it. Might be. Of course there might also be a very evil person somewhere below or near that red circle creating malware. One never knows, some people do.<br />
  276. Anyway the recorded data is, as you might have learned by now, data recorded by our sensors every time an attack occurs. This data is send to our server where it is stored in the database and also send to each client (like your computer). The client displays the data (for example to you). The communication between sensor and server is encrypted. Also sensors may be authorized or may not be. Those who are not are probably just enthusiastic people who want to provide collected data from their own sensors but who are not known to be trustworthy for the CA (Certificate Authority, your sensor needs a certificate to become authorized) or merely did not ask for a certificate. We marked those for you so you will be able to distinguish between authorized and unauthorized sensors. However this data represents an attack on one of our sensors only, mind you. There are many many more attacks happening somewhere else this very second. And your computer is always one of the targets the question is whether it is protected well enough.</p>
  277. </div>
  278. <div class="modal-footer">
  279. <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
  280. </div>
  281. </div>
  282. <!-- select countries view -->
  283. <div id="selectCountriesView" class="modal hide" tabindex="-1" role="dialog" aria-labelledby="selectCountriesLabel" aria-hidden="true" style="width: 700px;">
  284. <div class="modal-header">
  285. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  286. <h3 id="selectCountriestLabel">Filter</h3>
  287. </div>
  288. <div class="modal-body" id="selectCountriesBody">
  289. <div id="selectCountriesMap" style="height: 350px;">
  290. <!-- will be filled dynamicly -->
  291. </div>
  292. <!--
  293. <div style="padding-top: 10px; float: left;">
  294. Pick countries manually by clicking on them or choose them from the dropdown.
  295. </div>
  296. -->
  297. <div style="padding-top: 10px; float: right;">
  298. <select id="selectCountriesSelection" multiple size="1">
  299. </select>
  300. <button class="btn" id="selectCountriesAll">All</button>
  301. <button class="btn" id="selectCountriesClear">Clear</button>
  302. </div>
  303. </div>
  304. <div class="modal-footer">
  305. <!-- strange float behavior but looks best this way -->
  306. <div style="float: left; padding-left: 10px; padding-bottom: 8px; padding-right: 10px;">
  307. <label class="checkbox">
  308. <input type="checkbox" id="filterAuthorized" style="display:inline-block;" /> only authorized (enable to show only trusted sensors)
  309. </label>
  310. </div>
  311. <div style="float: right; padding-left: 10px; padding-bottom: 3px; padding-right: 10px;">
  312. <button class="btn" id="resetFilter">Reset Filter</button>
  313. </div>
  314. <div style="float: left; padding-left: 10px; padding-right: 10px;">
  315. <!-- -->
  316. <select id="filterAttackType" multiple size="1"></select>
  317. <select id="filterSensorType" multiple size="1"></select>
  318. <!-- -->
  319. </div>
  320. <div style="float: right; padding-left: 10px; padding-right: 10px;">
  321. <button class="btn" data-dismiss="modal" aria-hidden="true">Cancel</button>
  322. <button class="btn btn-primary" id="selectCountriesFinish">Finish</button>
  323. </div>
  324. </div>
  325. </div>
  326. <!-- show log view -->
  327. <div id="showLog" class="modal hide" tabindex="-1" role="dialog" aria-labelledby="showLogLabel" aria-hidden="true">
  328. <div class="modal-header">
  329. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  330. <h3 id="showLogLabel">Log</h3>
  331. </div>
  332. <div class="modal-body" id="showLogBody">
  333. <!-- will be filled dynamicly -->
  334. </div>
  335. <div class="modal-footer">
  336. <span style="float: left; text-align: center;"><strong>Warning: Never open a link (url) written above, otherwise you might infect your computer with malware!</strong></span>
  337. <button class="btn" data-dismiss="modal" aria-hidden="true" style="float: right;">Close</button>
  338. </div>
  339. </div>
  340. </body>
  341. </html>