MultiStage.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package de.tudarmstadt.informatik.hostage.services;
  2. import android.app.Service;
  3. import android.content.Intent;
  4. import android.content.SharedPreferences;
  5. import android.os.Binder;
  6. import android.os.IBinder;
  7. import android.preference.PreferenceManager;
  8. import android.widget.Toast;
  9. import java.util.ArrayList;
  10. import java.util.Collections;
  11. import java.util.Comparator;
  12. import java.util.List;
  13. import de.tudarmstadt.informatik.hostage.Hostage;
  14. import de.tudarmstadt.informatik.hostage.location.MyLocationManager;
  15. import de.tudarmstadt.informatik.hostage.logging.AttackRecord;
  16. import de.tudarmstadt.informatik.hostage.logging.Logger;
  17. import de.tudarmstadt.informatik.hostage.logging.MessageRecord;
  18. import de.tudarmstadt.informatik.hostage.logging.NetworkRecord;
  19. import de.tudarmstadt.informatik.hostage.logging.Record;
  20. import de.tudarmstadt.informatik.hostage.persistence.HostageDBOpenHelper;
  21. import de.tudarmstadt.informatik.hostage.ui.activity.MainActivity;
  22. import de.tudarmstadt.informatik.hostage.ui.model.LogFilter;
  23. /**
  24. * Multistage attack detection service
  25. */
  26. public class MultiStage extends Service {
  27. @Override
  28. public IBinder onBind(Intent intent) {
  29. return null;
  30. }
  31. @Override
  32. public int onStartCommand(Intent intent, int flags, int startid) {
  33. fetchData();
  34. return 1;
  35. }
  36. private HostageDBOpenHelper mDBOpenHelper;
  37. StringBuilder message;
  38. private String bssid = "";
  39. private String ssid = "";
  40. private String externalIP;
  41. String stackRemoteIP;
  42. String stackLocalIp;
  43. String stackProtocol;
  44. int stackRport;
  45. int stackLport;
  46. String stackssid;
  47. String stackbssid;
  48. //fetch data of records of last 10 mins
  49. public Boolean fetchData() {
  50. Long currentTime = System.currentTimeMillis();
  51. int fetchInterval = 1000 * 60 * 30; // setInterval in millis Millisec * Second * Minute
  52. Long filterTime = (currentTime - fetchInterval);
  53. LogFilter filter = new LogFilter();
  54. filter.setAboveTimestamp(filterTime);
  55. this.mDBOpenHelper = new HostageDBOpenHelper(MainActivity.getInstance().getBaseContext());
  56. List<Record> recordArray = mDBOpenHelper.getRecordsForFilter(filter);
  57. Collections.sort(recordArray, new Comparator<Record>() {
  58. public int compare(Record one, Record other) {
  59. return one.getRemoteIP().compareTo(other.getRemoteIP());
  60. }
  61. });
  62. ArrayList<Stackbean> b = new ArrayList<Stackbean>();
  63. String prevRemoteIP = "";
  64. String prevProt = "";
  65. int prevlport = 0;
  66. int prevrport = 0;
  67. String prevLocalIP = "";
  68. if (recordArray.size() != 0) {
  69. for (Record tmp : recordArray) {
  70. if ((prevRemoteIP.equals(tmp.getRemoteIP()) && !prevProt.equals(tmp.getProtocol()) && !prevProt.contentEquals("MULTISTAGE"))) {
  71. b.add(new Stackbean(prevRemoteIP, prevLocalIP, prevProt, prevrport, prevlport, bssid, ssid));
  72. b.add(new Stackbean(tmp.getRemoteIP(), tmp.getLocalIP(), tmp.getProtocol(), tmp.getRemotePort(), tmp.getLocalPort(), tmp.getBssid(), tmp.getSsid())); //,tmp.getLocalPort(),tmp.getRemotePort()));
  73. }
  74. prevRemoteIP = tmp.getRemoteIP();
  75. prevProt = tmp.getProtocol();
  76. prevrport = tmp.getRemotePort();
  77. prevlport = tmp.getLocalPort();
  78. externalIP = tmp.getExternalIP();
  79. bssid = tmp.getBssid();
  80. ssid = tmp.getSsid();
  81. prevLocalIP = tmp.getLocalIP();
  82. }
  83. }
  84. if (b.size() != 0) {
  85. StringBuilder message = new StringBuilder();
  86. for (Stackbean tmp : b) {
  87. message.append("\nMulti Stage Attack Detected!\n" + "IP:" + tmp.getRemoteIp() + "\nProtocol:" + tmp.getProtocol());
  88. // message.append("\nProtocol:" + tmp.getProtocol());
  89. stackRemoteIP=tmp.getRemoteIp();
  90. stackLocalIp=tmp.getLocalip();
  91. stackProtocol=tmp.getProtocol();
  92. stackRport=tmp.getRemotePort();
  93. stackLport=tmp.getLocalPort();
  94. stackbssid=tmp.getBSSID();
  95. stackssid = tmp.getSSID();
  96. Toast.makeText(MainActivity.getInstance().getApplicationContext(), message, Toast.LENGTH_LONG).show();
  97. }
  98. log(MessageRecord.TYPE.RECEIVE, message.toString(), stackRemoteIP, stackLocalIp, stackProtocol,stackRport, stackLport,stackbssid, stackssid);
  99. b.clear();
  100. message.equals("");
  101. }
  102. return true;
  103. }
  104. //Packing the attack record
  105. public void log(MessageRecord.TYPE type, String message, String remoteip, String localip, String protocol, int rport, int lport, String bssid, String ssid) {
  106. AttackRecord attackRecord = new AttackRecord(true);
  107. attackRecord.setProtocol("MULTISTAGE");
  108. attackRecord.setExternalIP(externalIP);
  109. attackRecord.setLocalIP(localip);
  110. attackRecord.setLocalPort(lport);
  111. attackRecord.setRemoteIP(remoteip);
  112. attackRecord.setRemotePort(rport);
  113. attackRecord.setBssid(bssid);
  114. NetworkRecord networkRecord = new NetworkRecord();
  115. networkRecord.setBssid(bssid);
  116. networkRecord.setSsid(ssid);
  117. if (MyLocationManager.getNewestLocation() != null) {
  118. networkRecord.setLatitude(MyLocationManager.getNewestLocation().getLatitude());
  119. networkRecord.setLongitude(MyLocationManager.getNewestLocation().getLongitude());
  120. networkRecord.setAccuracy(MyLocationManager.getNewestLocation().getAccuracy());
  121. networkRecord.setTimestampLocation(MyLocationManager.getNewestLocation().getTime());
  122. } else {
  123. networkRecord.setLatitude(0.0);
  124. networkRecord.setLongitude(0.0);
  125. networkRecord.setAccuracy(Float.MAX_VALUE);
  126. networkRecord.setTimestampLocation(0);
  127. }
  128. MessageRecord messageRecord = new MessageRecord(true);
  129. messageRecord.setAttack_id(attackRecord.getAttack_id());
  130. messageRecord.setType(type);
  131. messageRecord.setTimestamp(System.currentTimeMillis());
  132. messageRecord.setPacket(message);
  133. Logger.logMultiStageAttack(Hostage.getContext(), attackRecord, networkRecord, messageRecord, System.currentTimeMillis());
  134. }
  135. }