Sunday, July 29, 2012

FileSync

Ввиду некоторого разгильдяйства, а может, трудно предсказуемого рабочего графика, приходится мне в основном работать мобильно, на ноутбуке. Очевидно, что работаю я не один, и труды свои надо шарить с коллегами, чтобы ребята что-то доделывали, а где-то и их начинания надо брать и мне в доработку. Системы совместной работы банальны - файловые шары, но это и хорошо, поскольку с ним достаточно просто рабоатать. Вот и озадачился я как бы мне синхронизовать свои "ноутбучные" папки с обшими на шарах.

Я пытался использовать штаный механизм Microsoft "Make Available Off-line", но почему-то до добра это не довело, коллеги смеются до сих пор: файлы, которые были доступны мне оффлайново вошли в какое-то состояние, когда их невозможно удалить даже администратору сервера. Разбираться было лень, оставил это, собственно, администратору сервера, а для себя решил, что никогда больше не буду использовать этот механизм.

Задачу свою решил несложной программкой на C#.

Конфиг имеет простой формат:
#########################
# FileSync config file. #
#########################
# Format:
# SourceDirectory|DestinationDirectory
#
# Lines started with '#' - are ignored i.e. comments.
# Spaces before and after are ignored as well.
#
\\VBOXSVR\Documents\bin|C:\Documents and Settings\vtd\My Documents\bin

Через "|" указываются директории для синхронизации, по одной паре на кждой строке.
С # начинается комментарий.

Имеется ряд флажков, -h - покажет по ним кратенькую справку.

Скомпилированная версия с примером конфига и лога доступна здесь.
В целом, если я буду как-то и модифицировать этот скриптик, я буду подкладывать новые версии в Google Docs, тогда как исходник иже - менять не буду, лень. Также пока лениво использовать всякие системы социального кодинга, в том числе и контролирующие версии, - все-таки не так часто я занимаются программонаписательством. Исходник, как и в прежние случаи, привожу для того, может, кому какие фрагменты пригодятся для своих нужд.

Исходник - см. ниже:

   1:  using System;
   2:  using System.IO;
   3:  using System.Collections.Generic;
   4:  using System.Linq;
   5:  using System.Text;
   6:  using System.Text.RegularExpressions;
   7:   
   8:   
   9:  namespace FileSync
  10:  {
  11:      class Program
  12:      {
  13:          private static bool SaveBack = false;
  14:          private static bool DeleteBack = false;
  15:          private static Regex BackFile;
  16:          private static bool OneWay = false;
  17:   
  18:          private static string Path1, Path2;
  19:          private static StreamWriter Log;
  20:          private static string ConfFileName = "FileSync.conf";
  21:          private static string LogFileName = "FileSync.log";
  22:   
  23:          private static string getLogDate()
  24:          {
  25:              return DateTime.Now.ToLocalTime().ToString() + "." + DateTime.Now.Millisecond.ToString();
  26:          }
  27:  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  28:          private static void ProcessDirectory(string path)
  29:          {
  30:              string[] fa = Directory.GetFiles(path);
  31:              foreach (string f in fa)
  32:              {
  33:                  if(DeleteBack && BackFile.IsMatch(f)){
  34:                      try { File.Delete(f); }
  35:                      catch (Exception e) { Console.WriteLine("ERROR File.Delete: " + e.ToString()); }
  36:                      
  37:                      Log.WriteLine(getLogDate() + " DelBack: " + f);
  38:                      continue;
  39:                  }
  40:                  if ((File.GetAttributes(f) & FileAttributes.Hidden) == FileAttributes.Hidden) continue;
  41:   
  42:                  string f2 = f.Replace(Path1, Path2);
  43:                  //Console.WriteLine("ProcessDirectory: file: '" + f + "' <> '"+f2+"'");
  44:                  
  45:                  DateTime dt1 = File.GetLastWriteTimeUtc(f);
  46:                  DateTime dt2 = File.GetLastWriteTimeUtc(f2);
  47:                  if ( DateTime.Compare(dt1,dt2)>0 )
  48:                  {
  49:                      //Console.WriteLine("Date compare " + dt1.ToString() + " > " + dt2.ToString());
  50:                      if (File.Exists(f2))
  51:                      {
  52:                          Log.WriteLine(getLogDate() + " CopywRewrite: " + f + " (" + dt1.ToLocalTime().ToString() + ") > "
  53:                          + f2 + " (" + dt2.ToLocalTime().ToString() + ")");
  54:                          if (SaveBack)
  55:                          {
  56:                              //Console.WriteLine(dt2.ToString() + " == " + dt2.Ticks);
  57:                              string f2b = f2 + ".~fs" + dt2.Ticks;
  58:                              try { File.Move(f2, f2b); }
  59:                              catch (Exception e) { Console.WriteLine("ERROR File.Move: " + e.ToString()); }
  60:                              File.SetAttributes(f2b, FileAttributes.Hidden);
  61:                              Log.WriteLine(getLogDate() + " Backup: " + f2 + " > " + f2b);
  62:                          }
  63:                      }
  64:                      else Log.WriteLine(getLogDate() + " Copy: " + f + " > " + f2);
  65:   
  66:                      try { File.Copy(f, f2, true); }
  67:                      catch (Exception e) { Console.WriteLine("ERROR File.Copy: " + e.ToString()); }
  68:                  }
  69:              }
  70:   
  71:              string[] da = Directory.GetDirectories(path);
  72:              foreach (string d in da)
  73:              {
  74:                  string d2 = d.Replace(Path1, Path2);
  75:                  if (!Directory.Exists(d2))
  76:                  {
  77:                      try { Directory.CreateDirectory(d2); }
  78:                      catch (Exception e) { Console.WriteLine("ERROR Directory.CreateDirectory: " + e.ToString()); }
  79:                      Log.WriteLine(getLogDate() + " Create: " + d2);
  80:                  }
  81:                  ProcessDirectory(d);
  82:              }
  83:          }
  84:  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  85:          static void Main(string[] args)
  86:          {
  87:              for (int i = 0; i < args.Length; i++ )
  88:              {
  89:                  if (args[i] == "-b") SaveBack = true; 
  90:                  if (args[i] == "-o") OneWay = true;
  91:                  if (args[i] == "-d")
  92:                  {
  93:                      DeleteBack = true;
  94:                      BackFile = new Regex(@"\.~fs\d+$");
  95:                  }
  96:                  if (args[i] == "-h")
  97:                  {
  98:                      Console.WriteLine("FileSync - sycronize directories content. Normal run without parameters.");
  99:                      Console.WriteLine("\t" + ConfFileName + " - config file.");
 100:                      Console.WriteLine("\t" + LogFileName + " - log file.");
 101:                      Console.WriteLine("\t-b - save backup files before rewrite with newer version.");
 102:                      Console.WriteLine("\t-d - delete previously saved backup files.");
 103:                      Console.WriteLine("\t-o - One way. Copy newer files from SourceDir to DestinationDir, and not from DestinationDir to SourceDir.");
 104:                      Console.WriteLine("\t-h - show this help.");
 105:                      Console.WriteLine("Freeware. (c) Sergey V Soldatov, 2012-07-29");
 106:                      Console.WriteLine("Any part of this software can be used as desired.");
 107:                      return;
 108:                  }
 109:              }
 110:              /*Console.WriteLine(""+SaveBack + OneWay + DeleteBack);//show options
 111:              return;*/
 112:   
 113:              if(File.Exists(ConfFileName)){
 114:                  FileInfo fil = new FileInfo(LogFileName);
 115:   
 116:                  try {
 117:                      Log = fil.AppendText();
 118:                      Log.WriteLine(getLogDate() + " Started: "+String.Join(" ",args));
 119:   
 120:                      StreamReader sr = File.OpenText(ConfFileName);
 121:                      string l = "";
 122:                      while( (l = sr.ReadLine()) != null){
 123:                          l = l.Trim();
 124:                          if (l.IndexOf('#') == 0) continue; //comment
 125:   
 126:                          string[] dirs = l.Split('|'); // '|' - delimeter
 127:                          //Console.WriteLine("dir0 = '" + dirs[0] + "'; dir1 = '"+dirs[1]);
 128:                          if (!Directory.Exists(dirs[0]))
 129:                          {
 130:                              Console.WriteLine("ERROR: Source Directory " + dirs[0] + " does not exists!");
 131:                              continue;
 132:                          }
 133:                          if (!Directory.Exists(dirs[1]))
 134:                          {
 135:                              Directory.CreateDirectory(dirs[1]);
 136:                              Log.WriteLine(getLogDate() + " Create: " + dirs[1]);
 137:                          }
 138:                          //Console.WriteLine("ProcessDirectory '" + dirs[0] + "'");
 139:                          Log.WriteLine(getLogDate() + " Sync: " + dirs[0] + " > " + dirs[1]);
 140:                          Path1 = dirs[0];
 141:                          Path2 = dirs[1];
 142:                          ProcessDirectory(dirs[0]);
 143:                          
 144:                          //Console.WriteLine("ProcessDirectory '" + dirs[1] + "'");
 145:                          if (!OneWay)
 146:                          {
 147:                              Log.WriteLine(getLogDate() + " Sync: " + dirs[1] + " > " + dirs[0]);
 148:                              Path1 = dirs[1];
 149:                              Path2 = dirs[0];
 150:                              ProcessDirectory(dirs[1]);
 151:                          }
 152:                          Log.WriteLine(getLogDate() + " Finished");
 153:                          Log.Flush();
 154:                          Log.Close();
 155:                      }
 156:                  }
 157:                  catch(Exception e){
 158:                      Console.WriteLine("ERROR: "+e.ToString());
 159:                  }
 160:              }
 161:              else {
 162:                  Console.WriteLine("ERROR: No Config found!");
 163:                  return;
 164:              }
 165:          }
 166:      }
 167:  }

Thursday, July 26, 2012

анонимус против газпрома

В середине июля всеми любимые анонимусы наконец-то добрались до наших кормилиц - Газпрома и Роснефти!
Общество ликует, бложики и ленточки полны радостных комментариев.
Ну отпраздновали, пора посмотреть, что же случилось то.
Как основной источник информации возьмем pastebin.
К г-ну "леечке" в твит нет смысла заглядывать. Почему с маленькой буквы и почему не стоит - ниже.
Поехали.
Shell и BP пропускаем сразу и как настоящие патриоты упираемся взглядом в нашего голубого гиганта (не подумайте чего-нить, речь исключительно об инфобезе). Посмотрим сегодня на него.
Сразу настораживает, что на переферии у такой козырной компании стоит не Cisco в паре с HP. Неужели у Газпрома кончились деньги или сменилась парадигма? Ну это догадки.
Давайте посмотрим существуют ли адреса которые указаны в списке. Проверить это у релея не получится, тк он принимает письма на любой адрес и почтовая система не возвращает NDR-ответы.
Учитывая обилие кривых и ошибочных адресов в результатах взлома, спросим у гугла, что он знает о найденных адресах? Тут нас постигнет разочарование - почти все краденые почтовые ящики Газпрома известны гуглу. Даже такие косячки как gazprom.ruKulikovEV@gpp.gazprom.ru при строгом поиске прекрасно находятся. Взлом начитает навивать грусть.
Ну давайте хоть пароли проверим. В результате становится совсем не весело - перечень паролей простая подборка сгенерированных случайных фраз длинной 6 символов.
Капитан Очевидность говорит нам, что любимый Газпром не по зубам капиталистическим анонимусам, а г-н леечка, в свою очередь лжец и пиарщик.
Результаты ниже. Попозжа посмотрим, может Роснефть не устояла.


email md5 hash pass google
N.Kislenko@econom.gazprom.ru 827a29aedc0979fd01d7bc77fb4b74e3 qU5Pk0 9
gazpromavia@gazprom.ru e27893c417378515977848e79f41524e HtZy6G 5220
smolgeo@kuban.gazprom.ru e2852b92f6675efbfcc9438bf9bd19d6 tLZUxo 3
vniigaz@vniigaz.gazprom.ru 172550e375dc2ff16857b5874e3ccf21 zbxZR6 4420
sng@sng.vniigaz.gazprom.ru c5360d75d37952b786278455c7910775 QALpTe 93
ponomaryov@oeg.gazprom.ru dcd0fbad6089165d8b7609ebb709ef62 1Gut3C 1
Veliyulin@oeg.gazprom.ru 031ab26679e3bb315a83c118e5193917 bR32AD 66
afilimonov@spb.ltg.gazprom.ru c048b8ebbae6b2f366a2fce21b137b87 fxzOvh 4
Onlineafilimonov@spb.ltg.gazprom.ru 1b0edbfc4f500e3bba0803adda5118f2 vHkqj1 1
3afilimonov@spb.ltg.gazprom.ru 77b4bf28a66ee919c78bee393e0d1d5a FKR6ms
o.buchnev@econom.gazprom.ru f2ea55044b13d0d48c1b8853b705ee4d ixaYaT 5
emelyashina@econom.gazprom.ru c71f27da324b4e1edfa18671ea0d4ff0 qDL1CF 5
s.ivanchenko@econom.gazprom.ru dd890e273da212002d19ce2eda801d15 Evs0Sa 4
a.arabskii@ygd.gazprom.ru 6d57f57c574b01bc9b5c9b79c2c03a52 mucaVu 4
A.Kerusov@grr.gazprom.ru 3e10d322d297be90a4b9b1000f6c18cd SrjklW 2
ural@ekaterinburg-tr.gazprom.ru f9ca5a1e1b577de97896bce5366bb463 DVsUFv 1710
V_Yakushev@vniigaz.gazprom.ru 583105c728132314575ad707a55c85d7 Ro1bSn 94
gpc@gpr.gazprom.ru a965a1ee2201e2f03df76ab67b718e4a KmxEVk 112
lavr@ss.gazprom.ru 008b1f2e92c2c7e953bf9383558c9640 FtTknz 2
samstg@samaratransgaz.gazprom.ru de24bdcf9644b1cf391bf2fcacd6edd9 MEFZOe 1180
I.Vinogradov@samaratransgaz.gazprom.ru b4f09f4b30d697d79234f2662908c9e6 YL5CTf 8
v.asliev@ekaterinburg-tr.gazprom.ru 7068556588ac761333e94c6dcfabccf6 MQNNxI 5
G_Akopova@gwise.vniigaz.gazprom.ru ed086bde7baef22b94a9096f99a0f647 zl4Mou 5
N_Vlasenko@gwise.vniigaz.gazprom.ru 2984001c46394e025fd8bb3a94d41972 RlIcDv 6
vvoronin@sgp.gazprom.ru 7ded2f5b649cd71725c725d2a8b46cfb JgE1rf 3
mail@burgaz.gazprom.ru d032caeaff42a69abfcbd12b767cd375 nhqXyp 6940
e.mazurina@sng.vniigaz.gazprom.ru 1677048a2f5651ae8cef7c1c47674bef F5PFUK 9
farafonov@samaratransgaz.gazprom.ru db65cd4c06d8315384c94029de717cf2 cYOuf3 3
kalinin@oeg.gazprom.ru 058bbc2cfc393c88689af809f4758eba 9y5QhV 3
v.silchenko@ygd.gazprom.ru 6a29add8534d9ab43e2828b6e05de74c 5Y9044 4
gazpromhotel@usz.gazprom.ru 8da3ea1f3d228920fe65fc37fa73ccc3 T2peNc 314
ltg@spb.ltg.gazprom.ru 6b87bed0ac77813e03e156dfae78200c bD8oJU 1460
gazpromsvyaz@gazprom.ru bae2a3fff00e283b6b562f1a234caa22 C7SmqR 50
D.Rubailo@ygd.gazprom.ru f7e03c85f1e5fa1de026f02467a76db6 U4klqZ 1
Shishkin@nadym-dobycha.gazprom.ru 09159eafa4ef01f32f57bcbc3cca5593 u5tuVA 2
V.Popov@urtg.gazprom.ru 3031ab835137a6c4b6da3892fbb483b1 lVFAfS 7
a.andreevsky@adm.gazprom.ru 5c6f2bd56e80d6b0014b86cef23b20d7 woEyDn 3
ved@vniigaz.gazprom.ru 9e27340d0cf9489e2836ce949c033b4f MoGRnh 2
i.fick@kuban.gazprom.ru fb6bb5e30b86de78249028912336b3eb sIGdPK 5
nazarevich.vv@gazavia.gazprom.ru 41c285dafbfa7ff7d80c123d3985e73a Z4n1kT 8
a_ponomareva@vniigaz.gazprom.ru 5d372bd88aa181cf423e200480a009a0 t1lDXh 2
ayakovlev@vld.ltg.gazprom.ru 848d599a052bd056f82a5e80f5add5c1 4KJUuu 2
M.Krasnov@gazprom.ru e2f6c663261a7c5c8814744e340a6a22 bJlzAj 1160
O.Moreva@gazprom.ru 61d140408365bf28e9f26196e61008cf ge7P05 976
iarshakyan@ttg.gazprom.ru 6f5be87737bb28ca916ecabee8a3ba72 ucxAKE 4
tarasovsky@mtg.gazprom.ru 895f4b6995eac4ec9ae782a9c0caa676 L4FcOG 1
klevitov@notesgw.vniigaz.gazprom.ru 9a0f07b1c2b0ed4f9d8c78b5443f777d ehuWcR 2
e.semenova@gazprom.ru 65bb01e0d3f46eff59f8d318558c1f72 evxza9 2
v.vernikovskiy@gpr.gazprom.ru 20d056388e48c616b2168a10a8b92cff poMs9J 6
mnacakanov@burgaz.gazprom.ru 78879e8c05d1c3810425f160388e0f3f L7kIdh 17
a.stepanov@gazprom.ru 3fa995919e1907e6fe2173a576787680 NUsZcK 583
A.Mastepanov@adm.gazprom.ru 9f98b6c1bd7d11a89fb4e833841d89e2 NdkKgO 2
d.ignatiev@gazprom.ru f76c4d3f43795f45e86c0bf2f6b6df02 kP4Rfc 52
Stroykova@oeg.gazprom.ru b7df5ed37593a3464750a346583d2247 cGykVt 2
ssemenov@astrakhan-dobycha.gazprom.ru 0c461e7a6bc962c26a78cb8dbe2fbd34 YtUZ30 7
zhdanovich@gazprom.ru 2595927e91f279fdf3470497a344e2bb Zz20Uh 147
Said@dgp.gazprom.ru 6e046cdd8fc88ea9637dc5acc4c18a1b m4lD1H 51
tender@sgp.gazprom.ru b5605a4bbf646076d0070cab4d73716b GAhc1b 9
d2011@oeg.gazprom.ru ce5e1e8f8a3524235c515cb2f0eea0cf GcBY2D 1
ZakirovNR@gpp.gazprom.ru 5da6f5eb7ff91aa3e8ffc9361056ed4d QVp99v 2
moiseenkotl@gpp.gazprom.ru 534783db705b8872ab68f5c524c18e8e 9CHjTR 4
ermilovamv@gpp.gazprom.ru 61cc6325d977ab52e84d57b804879223 4VT6DI 3
kravchukyp@gpp.gazprom.ru adc0d5e23ca373b49be5715385dfafde cBuF2P 2
KulikovEV@gpp.gazprom.ru edffe50532503b48f5f0ba054605a200 Tm4UmP 897
LejepekowEV@gpp.gazprom.ru 0b0956c2d38c00fb8d4db1b86d83c415 wtgHcM 2
BelovAV@gpp.gazprom.ru 226ba493ee29826f80d758a71a12b2aa jO1iVS 1020
MasyuginAN@gpp.gazprom.ru adf94160b748dcc64d5f333fa39473ee lOIIFv 3
sgpz@sgpz.gpp.gazprom.ru bed6f22f439da827d4ae7e63018bede3 K3rRgj 260
belovav@gpp.gazprom.ru b0c935dfb84fed016128bf362b19165a fEyoAk 1020
ChurkinaLV@admu.gpp.gazprom.ru 0ab307ab2b5a703cbf2123a651305a98 jM7gXO 1
AfanasievIP@gpp.gazprom.ru 28b01d20b46dd05d90cbd926af3b0eea G0mBNO 2
SolodovPA@gpp.gazprom.ru 767a3a874fbd7d1fc6651b5d3fc5d8ca mmwd7N 3
hurilovaMJu@gpp.gazprom.ru ad381034385d7bc479afd1256f556b8e CTUGdM
SagovaMZ@gpp.gazprom.ru e99c5cb6533c40ade81784493e4584c9 lQW78N 1
KravchukYP@gpp.gazprom.ru adee184fba5b8fbed8cf1f7d75e53095 GHzMpG 2
kulikovev@gpp.gazprom.ru 871cbf9b767b167f0ab9d3aac0c32679 L63xT8 897
ZakirovNR@gpp.gazprom.ru cb69d549e3ca39574e0506eb23beb4b2 j1TEld 2
donevrn@utju.gpp.gazprom.ru c955ff064e4103d6d81205ec8a918779 s348Mv 5
gazprom.ruKulikovEV@gpp.gazprom.ru ab6b5097aace4c4ce00133aa3713333d niA3Zq 1
kuzmenokvf@gpp.gazprom.ru 32aab7cd1010248d786dc048485a0ef3 gZ90hN 1
koblikLV@sgpz.gpp.gazprom.ru 0128799070dc0c2ac061cb0dd45a1044 vXgsZl 1
office_work@zsk.gpp.gazprom.ru 671d90c783582b6898bf68e6bb67e267 1bRouN 7
lovAV@gpp.gazprom.ru 19b03ce6c8f5ea12b2adbcaf2039121d KNHpzD
MamayevaAR@gpp.gazprom.ru 0ee16c4409b92d1aa82ad5d45e8458d3 Lj514p 1
ZyatkovVE@gpp.gazprom.ru 75a5176a2a1c29f59f30691bfe6dcaad 9cyEXG 1
office@gpp.gazprom.ru 171ae69f93d4fde7f9ffc230a44da4df 8EWoBs 1
yakimovan@utju.gpp.gazprom.ru 5e3a3cf7112c1e3890a1813f8c3399b7 yQVQ8V
v.vernikovskiy@gpr.gazprom.ru 81baa03efaedd935ba338e434fc1af8c GUtsCy 6
E.Sobolevskaya@gpr.gazprom.ru 845e1dc2b75ff35685e4dc2955bd7649 caTIn7 3
V.Vernikovskiy@gpr.gazprom.ru 4a75c3637ff8a6b377e0c784e7d6eb58 FYQpzU 6
L.Stepanova@gpr.gazprom.ru 71d745baf94c04c13f1af9ec19c26f37 FxkFKt 9
T.Vesnina@gpr.gazprom.ru 7ab35ea1fbeb844502f0de6efca2666a nW6rVk 7
gpc@gpr.gazprom.ru c48c6b900d90ecf334e0527013d8298b nnU0aV 112
O.Eremets@gpr.gazprom.ru bc4f7b5cbac664ddda49f5606e49feb6 xjwwDW 1
M.Latyshev@gpr.gazprom.ru a768a12c40a723612cfb41e2138ecb71 wR3fW5 1
K.Yakovleva@gpr.gazprom.ru e35c88d477369d6ddca6ccef9f3f4608 w5g6QW 1
d.annenkova@gpr.gazprom.ru 1f06b8ecd54228a8d7225584c577853c uSAwg6 3
E.Bistrova@gpr.gazprom.ru 5775275b0e69dd25b48e5ce0aa3b4265 TiQ96Z 43
A.Kuznetsov@gpr.gazprom.ru 9e791dd7a5df8630cd519abf05b5c88f 7eKlOH 2
E.Kravchenko@gpr.gazprom.ru 39a8b10c071a41c5a1ca9e0ea1575e57 qkb7Zo 2
N.Kislenko@gpr.gazprom.ru d1cb930ca3d63acb9ab3d238c85bfcee evEE6p 4
E.Bystrova@gpr.gazprom.ru 6c0f7ec46cabb3609777e82cb710aeef rPSeF7 1
a.belyaev@gpr.gazprom.ru 7c0222203d1a4e2a215de5ebaa99f032 TjNMGl 4
V.Jakubov@gpr.gazprom.ru a4e3713fb9e0ca0674c5e8694cf90363 foRZOL 2
V.Vedin@gpr.gazprom.ru daa558a4f7daf91492c2c547141426bb hijQ7Q 3
E.Nezemskaya@gpr.gazprom.ru a4a9f82a6972d3c834aef3be005ab75d B9by0x 4
Kislenko@gpr.gazprom.ru 82e16af97ba6a8530b1d94f2d17ba4ea E1DLF0 5
a.konovalov@gpr.gazprom.ru 27a2c2c07aed7983059fe3a27a7ce1f1 UcqztM 3
a.shestakov@gpr.gazprom.ru b9d04d0812d8ac0b78b0361d815943f6 w6hs0Q 2
N.Proshkina@gpr.gazprom.ru 747686ec22014d3cbc1a27f21dede0f1 Pmyuj2 6
P.Bakaev@adm.gazprom.ru caa82383f327423179f0616cefbdcf7a SlUE3r 5
O.Nagovitsyn@adm.gazprom.ru 68ee40b179e02ed48eaf95c6ea375b94 YTImkn 5
V.Saveleva@adm.gazprom.ru a6a8f25f54607a73a981204334ca4332 5nhvnD 8
S.Nagerniak@adm.gazprom.ru 63769cf8045ae752df3682c01c5595b8 LH8Ogn 6
E.Lobatcheva@adm.gazprom.ru ea6c9306d8966c46db0be0b0b75b6072 AuBc9J 1850
o.borodina@adm.gazprom.ru 5c05ca627244e51ece3e87d2f90edd8d h624Pg 1080
A.Baranov@adm.gazprom.ru 0189b1c5241ae38113191c3a27ab0d86 ErY1DC 176
A.Miller@adm.gazprom.ru b55b2f34eb567f802db91ee5c5404d5d 8GuJP7 5
S.Balashov@adm.gazprom.ru 22b587d025fc5fcf836ca1b315692860 SXCyHh 9
o.boyko@adm.gazprom.ru 43343e78cd267fb4ab2e5b906d62a830 rjaq9r 6
a.kruglov@adm.gazprom.ru ab95747784ef940d516aa4026b6c8051 COwwC4 5
o.aksyutin@adm.gazprom.ru c5ba3413ff728f23ab29078729ffad4a VGm0Sd 2
e.pronin@adm.gazprom.ru 883a578e944c2efb55cbca7b27ba2fc0 Anw42g 188
o.aksiutin@adm.gazprom.ru 14a181b87fef6c71472545c6d2fe6f00 SGn84F 18
a.andreevsky@adm.gazprom.ru 0322684b1685bc7b803db21d17bb1d5f qZnSYb 3
E.Pronin@adm.gazprom.ru de53753b76c5f444b4a43206f9c6190b lvfOIA 188
G.Sapojnikova@adm.gazprom.ru a6f06d0407720f54c76575bec2b9af05 OaZRlt 27
a.mikheev@adm.gazprom.ru 0fc10e8d85ec67c75a5566f9311a06a0 jIXftE 57
D.Semenov@adm.gazprom.ru f36c7bb7371444da59f93e8068998fff o8fBKi 5
Parasyna@adm.gazprom.ru 6ad211b230e2dbce4b4961295f0794e1 6OIocd 3
V.Sedov@adm.gazprom.ru 41a74730a047c7d4bf87d50b3156f74e NKxLIE 5
pavlenkov@adm.gazprom.ru 0e9c97fbab3b661d79da2a02f7b850fd DqdBWR 7
V.Minlikaev@adm.gazprom.ru 74979e4469aaf949b2b88d41f077dc80 sgoglC 8
A.Kalinkin@adm.gazprom.ru 3b337963af41a05e9cf48a0ffcb246af 2giVM3 2
M.Krutchinin@adm.gazprom.ru 0a637962d455fed572788eb91208c1ff qg8MUG 5
D.Grinenko@adm.gazprom.ru be5dfa70c096a31006fc6f0ce071662a O8msmG 6
V.Volskiy@adm.gazprom.ru fbf7e4691edd06eb8a89e7fdd3371dcd il1hp2 1
Zakupki@adm.gazprom.ru bf30037d719376d61fdaecc071410c9f 4F15Tt 214
V.Rusakova@adm.gazprom.ru 6ee9fbe88907e0239ba6c303d44acd5a jW9A1E 8
R.Kirilina@adm.gazprom.ru acce2123c876679f5211b2b7212040cc eduRt5 4
M.Baryshnikov@adm.gazprom.ru a2b3b33a833f0281c297f2bf6ff9b80a ifj8OG 8
i.gudkov@adm.gazprom.ru 5014335c5548c7be50a19aac7cdaecc3 rYQmxi 6
V.Sheptutsolov@adm.gazprom.ru fe208e227345cebc61385a587d588742 jjW6Ch 1
A.Shipilov@adm.gazprom.ru 39d8afc4a0c49c3213a74ee96e09868c qZwVk9 3
O.Bazvanova@adm.gazprom.ru 7eeea88162324e22015070c4e666949a tnOCNk 3
O.Andreeva@adm.gazprom.ru e92c7bfbc87dc52f13e1d966feb38295 pY92UZ 1
s.balashov@adm.gazprom.ru 3278180defdf0e279f5906999fddbbf3 XCpr6N 9
A.Kostenko@adm.gazprom.ru f58726ec09bb4975ed99c57af663d5ba 7BDA8w 4
O.Fakeeva@adm.gazprom.ru 84e43584f23d76062aa4b222843bb65d pXwqT9 9
V.Rabkin@adm.gazprom.ru 0119fa2ff5c8c366a00bcf4b6a04f433 HdqluV 29
S.Karnaukhov@adm.gazprom.ru 40b5fc2fa8bb892e71f8496368270abc yjOQB6 6
s.fomina@adm.gazprom.ru 253c2e2e219ccd82c1c91d7f2a2610c2 Mhhv9r 1
a.baranov@adm.gazprom.ru 137c5c60cb53e33e8a79c8d18b013862 MrbMRJ 176
V.Pavlov@adm.gazprom.ru 857a20bbc793f933e2694a2d3a6f608a WMibSj 1
A.Novikov@adm.gazprom.ru 0107ebbf6e8cff2f7754381fc21b7672 CXbveK 9
An.Filippov@adm.gazprom.ru 8db4af930b909d7b19f1a551fa6385f7 HBMvO9 5
G.Zubarev@adm.gazprom.ru d8ecd502ac35c036139682bb84307c92 BBg5K6 2
A.Serebriakov@adm.gazprom.ru 0e1fa7a12c95351e6b041c0aefce60e5 w53gtd 8
S.Alimov@adm.gazprom.ru 08ebd56b6c930ba7c42d4aa1d00b7b0e ctleyy 3
e.medvedeva@adm.gazprom.ru c86bb924151716eb18764911b6a1079c jXAKOp 5
A.Bienco@adm.gazprom.ru 0ec4166085bced51165d8e8f64831a53 sYcVmA 1
A.Ishkov@adm.gazprom.ru f6f6fe37ad5050083c011137c851d991 0Ty6Jz 56
A.Makarova@adm.gazprom.ru 065f5c906069ffef99d74a6e979f751e HhpiDB 43
A.Stroganov@adm.gazprom.ru 2b31e08811f325fabfb612838705caf7 NV6SNv 54
A.Gretchko@adm.gazprom.ru 81856da5ecb3f5b113e273c97dbc1f70 mvHJHI 8
M.Rusakov@adm.gazprom.ru 4cf3a527ffa645863f364e361b2f3a39 6vstpn 1
S.Karnaukov@adm.gazprom.ru 3727f5c6af69422636a643764377edd3 kZaZhi 2
v.parasyna@adm.gazprom.ru e507917316ea441830a9bb6f3c5d3df1 D6p75r 3
O.Rybaltchenko@adm.gazprom.ru 3d61d9996a998884f732c62fe55c13df cIIipK 1
a.sharifullina@adm.gazprom.ru c8492f051024c8fa9aba54350157b4d4 y3zHWP 1
a.mikhel@adm.gazprom.ru 8676cd7fcb121b8fa151c12fb94388fe QZCiGO 6
S.Konyaev@adm.gazprom.ru 570a1f01d2c759b78e426a134c206df9 tymDrP 6
I.Prudnikov@adm.gazprom.ru 3273b29f33adc3a09c5f31f9c94623e4 cwGmBK 1
a.stroganov@adm.gazprom.ru 06fac95f78b2d017e129af63222214e6 ghJvnh 54
V.Vovk@adm.gazprom.ru 2d7867e6b55abfd0c66cd4b87b49bcea AlWOq3 1
r.isangulova@adm.gazprom.ru 73a23faf7aed272791c86ad2471c70eb wSIU3Q 1
O.beldiy@adm.gazprom.ru 12a97a19651abff44882fd273bb30fb0 vERmux 2
A.Arabey@adm.gazprom.ru 0bf991c6d7a2ebc5f5981b88a3bec061 hfNesV 4
a.gnoevykh@adm.gazprom.ru b095b51db99a9796053d4c25f2e334e4 lAIyd7 3
E.Kiselevskiy@adm.gazprom.ru c507efecb613e279b992432e9ec08678 WdK3Cm 4
B.Erekhinskiy@adm.gazprom.ru 27a9bb505c3a1fd74fb947022753f2b4 VOGEtE 5
S.Bronnikov@adm.gazprom.ru 235f423b3391341a4c6da2d8d7276032 F4pPvF 92
N.Petrov@adm.gazprom.ru 0d5ec933e29b2bc233612fe12cd4cc3d jKp0Fn 2
N.Borisenko@adm.gazprom.ru 2f0ad9901f5f5bd88141a871ea475a0e m8lZID 24
S.Ershov@adm.gazprom.ru efe46a71d3defd21b2f4603bd9721bb8 rgQCsN 2
V.Parasyna@adm.gazprom.ru 6018ef951356639e69878a2c9e7fa876 OcTzqt 3
.Nepogoda@adm.gazprom.ru 9ef8eea24023a260285be2991fbfa5a4 UewwhV 1
a.kuzovatov@adm.gazprom.ru c5368e1e4a29c8aeedf892e73babe7fe J9yaWX 1
v.baskakova@adm.gazprom.ru 1cd4f9354cf6e451f20ed1f2df493722 PpiZIM 1
A.Solovev@adm.gazprom.ru 4f800683e1d7e758b77a3873f6ab2991 gbSg5G 4
a.shipilov@adm.gazprom.ru 1efaa84fd24a227f5d75d9df67a2ecc0 c6OEm5 3

Thursday, July 19, 2012

я не я



Wednesday, June 6, 2012

История неба

Вынужден сознаться, что новостей я читаю значительно меньше, чем следовало бы, поэтому некоторые вещи я узнаю тогда, когда все уже стали подзабывать... поэтому, да простит мне читатель, мои баянные переборы...

Ну как бы то ни было, по моим ощущениям в последнее время стало модного много говорить об облаках, облачных сервисах, инфраструктурах, классификации всего этого добра, о выгодах для бизнеса, даже о безопасности под что даже есть некая теоретическая основа (которая, правда, даже на теории смотрится пока не очень, не говоря уже о практике) - гомоморфное шифрование, .... Вот и я решил идти в ногу со временем и тоже об этом подумать, вслух. Подумать о будущем, о тенденциях, но начать с истории.

Сначала была большая Компания, в ней было свое подразделение ИТ, числящееся в штате Компании (упустим те времена, когда Компания была, а ИТ еще не было). Они работали прекрасно, но ....

Откуда-то прилетела весть об ITIL, о том, что он нам улучшит все, что можно улучшить, повысит все что можно положительно повысить, что создаст для бизнеса возможность двигаться в еще более светлое будущее. И кто-то решил, что отношения между подразделением ИТ и остальными надо строить по модели Подрядчик-Заказчик, когда подразделение ИТ превращается в поставщика услуг, а остальные (назовем собирательно - Бизнес) - в потребителей этих услуг. Немного покорежили терминологию: теперь хелпдеск не просто ходит по пользователям и решает проблемы, а ИТ-подразделение оказывает услугу сопровождения рабочих мест, а в целом все осталось как прежде (упустим все что негативного получилось из преобразования работы "по щелчку" в работу "по SLA"

Спустя время Бизнес подумал, что раз ИТ такие отщепенцы, а также в целях повышения показателя свей эффективности путем вывода непрофильного бизнеса, пора вывести ИТ в аутсорсинг. Т.е. все это ИТ-подразделение стало другой компанией, благо для этого была основа - спасибо духу ITIL. При этом вывелись только люди, железо по-прежнему осталось принадлежать Компании.

Долго или коротко ли они так работали, когда ИТ не обладало своими средствами производства и происходили интересные диалоги, когда Бизнес говорил ИТ, что мне нужно такое-то бухгалтерское ПО, а ИТ заявляло, что для того, чтобы оно заработало нужно построить кучу инфраструктуры: купить и отремонтировать серверные и кроссовые, купить сетевое оборудование, все его настроить, купить кучу серверов, внедрить какой-то каталог (пусть будет MS Active Directory), ...., потом все это поддерживать.... Бизнесу нужно все эти средства амортизировать, учитывать,... какой-то Change Management, Configuration Management, .... какой кошмар! Зачем мне все это железо? Мне нужна только ERP и то, мне не важно на каком железе оно там живет и как сложно это все поддерживать, нужно только чтобы сотрудники могли там работать.... + выполнялись требования по доступности, конфиденциальности, целостности, аутентичности и т.п. И Бизнес решил вслед за людьми продать и все железо. Какая красота: не нужны эти дорогущие ЦОДы, не нужно все это железо вечно закупать, складировать, учитывать, утилизировать. Просто сказка!

Так появились Облака.


Это я все о том, что облака - неизбежность развития ИТ (и ИБ, как части\свойства ИТ), поэтому надо начинать придумывать где нам ИТшникам и ИБшникам занять свое место. Это слова о том, что рано или поздно любому ИТ аутсорсингу Компании надо быть готовым становиться Облачным провайдером, или он не выживет. Это о том, что так или иначе экономическая составляющая возьмет свое и все данные уедут в Интернет и надо уже сейчас много думать о том, как там их защитить, как защитить коммуникации и пользовательский терминал, ибо периметр перенесется на endpoint, а на сервере выродится в защиту непосредственно данных.... Надо думать....

Sunday, June 3, 2012

COA и KPA на пальцах

Памятью от PHD осталась книжка Шнаера. Купил я ее давно, прочитал тоже, а вот подписать у автора получилось только сейчас.

Ну, конечно, Брюс не упустил возможность вкрутить что-то "криптографическое".

Понятно, что условия, в которых это было написано (кругом какие-то люди, которые лезут фотографироваться и суют что-то подписать) не оставляют шансов этой "шифрограмме" быть сложной, очевидно использовалась заготовка, очевидно я не одинок, у кого такая же. Очевидно, вбивание в Гугл сразу даст результат..... но все-таки челендж, хочется поупражняться.

Были испробованы:
- сложения букв с разными константами (циклический сдвиг),
- сложения букв со своим порядковым номером (снова сдвиг, но по-другому),
- сложения букв со словами типа "PHD", "Schneier", "2012" (тоже сдвиг)


.... для чего были сооружены нехитрые программки на C.

Собственно, что я делал - атака COA. Шифртекст - все что у меня есть.

К своему стыду, я так и не догадался почитать текст в различных направлениях!

Как и предполагалось Гугль дал ссылку. Из нее стал известен открытый текст: "Enjoy the book". Теперь я перешел в режим KPA.

Дальнейший "взлом" занял меньше секунды.

Читаем из правого верхнего угла сверху вниз по столбцам :-)

Мораль: прежде чем кидаться в сложности, посмотри внимательно задачу (сначала думаем, потом трясем!)

Saturday, June 2, 2012

Mimikatz/WCE1.3 vs. MS Digest/WDigest

Много шума наделал выход утилиты/утилит, вытаскивающей пароли из памяти "lsass.exe" в открытом виде. Не будем говорить много о том, как это плохо и, что, в целом, можно придумать схему, когда чистый пароль хранить не надо, а можно обойтись хешем, а посмотрим что на эту тему пишут официальные документы.

Из первоначальной RFC26117 следует, что "by design" использование аутентификации Digest требует "знание" сервером оригинала пароля. Это просто понять, если посмотреть на формулы в Википедии. Ну и Бог бы с ним, все-таки 1999 год, да и цель свою - не передавать пароль в открытом виде по сети, в отличие от Basic (хотя, при использовании SSL/TLS получается даже безопаснее, поскольку для Basic серверу достаточно знание хеша пароля) - протокол реализует.

Как отключить все эти пережитки прошлого (допустим, что я готов к последствиям), я так и не нашел. Однако, в technet-е , указано, что фичу хранения пароля в открытом виде можно отключить. Цитата:
"Digest authentication is successful only if the domain controller has a reversibly encrypted (plaintext) copy of the requesting user's password stored in Active Directory. To allow passwords to be stored in plaintext, you need to activate the Store password using the reversible encryption setting on the Account tab of the user in Active Directory. Alternatively, you can set group policy to enable this capability. After making this setting, you need to set a new password in order to activate this feature because the old password cannot be determined. "

Как этот параметр ставить и где он есть написано здесь.

Я игрался с WCE. На моей, полностью запатченной и забезопашеной Win7 wce1.3beta работала на раз: пароли доменных учеток дампились в открытом виде. Причем ее x64-версия даже не палилась антивирусом.  Единственная проблема - если в пароле есть русские буквы, пароль не показывается, пишется "<contains-non-printable-chars>" => ищу (может не так целенаправленно) исходники, готов поправить.

Важно отметить, что параметр "Store password using the reversible encryption", по-русски это выглядит так (кое-что пришлось замулевать):

 Отключен. Если я правильно понимаю что написано:

то не должен пароль дампиться, а все работает.....

Какие у кого есть предложения? Как можно обезопаситься?

Monday, May 14, 2012

Бороться с APT?

Много последнее время шума об APT почему-то. Наверно, кому-то это надо. Лично мое убеждение, что коммерческой компании, не занимающейся ИБ, вообще бороться с этим не надо, поскольку "типовых" мероприятий обеспечения ИБ точно будет недостаточно, а "не типовые" - во-первых - экономически нецелесообразны, во-вторых - их тяжело угадать. Тут ровно та же история, что 0-day. На вопрос: "Как вы боретесь с 0-day", я отвечаю: "Никак!". Все разумное, что я могу сделать - дождаться патча от вендора, на что я влиять не могу, а значит это не стоит моих усилий.Есть, правда, одна очень важная разница: 0-day - проблема общества, тогда как APT - исключительно ваша. Тем не менее, я склонен считать, что наиболее эффективная борьба с APT лежит вне плоскости технической информационной безопасности. Подобные атаки следует расследовать, прогнозировать заблаговременно, действовать проактивно, ну а если судьба, - то вкладываться в BCP и DRP.
Собственно, мне и писать-то об этом не хотелось, но прочитав очередную статью, почему-то захотелось ее прокомментировать. Наверно правильно, что статья популяризует "типовые" мероприятия обеспечения безопасности (за что автору следует сказать: "Спасибо", но неправильно, что автор утверждает, что этого достаточно.

Итак, по тексту. Я буду давать в "кавычках" курсивом начало фрагмента к которому относятся мысли. Просто начало фрагмента без каких-либо попыток "выкусить" из контекста и прочих дурных помыслов.
"Первый способ - сотруднику компании присылается письмо с документом...."
О Первом способе или 0-day vs. 1-day - традиционно про патчи. Могу с уверенностью предположить, что ни одна коммерческая компания не ставит обновления сразу как они возникли, так как а) экономически не целесообразно делать это каждый месяц, так как б) надо тщательно тестировать со всей прикладухой, коей может быть очень много. Поэтому этот вектор всегда работает.

"Также ошибочным оказалось распространенное суждение о том, что альтернативные платформы защищены от подобных атак и практически неуязвимы....."
Об альтернативной платформе. Очевидно, что эксплуатируют то, что популярно. Много ли у нас десктопов с Debian на борту? Мало, так вот => а) их эксплуатировать не рентабельно, б) даже если и есть успешные компрометации – шума мало, так как, банально, пользователей мало, => может, до нас и не долетает.

"Второй способ – атаки на внешние сервисы, такие как сайт компании...."
О втором способе – см. первый способ. Снова о патчах, которые надо ставить. Не надо думать, что на серверах они ставятся лучше чем на десктопах. Тут та же проблема с необходимостью тестирования, только риск больше: если после патчевания встанет десктоп бухгалтера ущерб значительно меньше, чем если встанет внешний почтовый шлюз или интернет-представительство Компании. Отчасти для соблюдения этого баланса между необходимостью регулярно обновляться и экономической невозможностью это делать, можно использовать "навесные" системы безопасности, типа HIPS и т.п.
"Так, существенной преградой на пути APT является отказ от работы пользователей с привилегиями локального администратора..."
Про отказ от административных прав. Получение непривилегированного доступа – тоже уже много, так как а) зловред можно запускать от пользователя и поставить в профиль, б) известно куча уязвимостей повышения привилегий как 0-, так и 1-day (вспоминаем Никиту Тараканова), причем в нотации Micosoft – они не Critical (обычно - Important), т.е. они не в первом эшелоне патчевания =>, помноженное на нерентабельность патчевания и его запазывание, получаем достаточно большое exposure.

"Но предпочтительным остается быстрое обновление всего ПО, установленного на ПК, серверах организации..."
С ПО от третьих сторон – вообще кошмар, говорить об этом не будем. Согласен.

"Как я писал в предыдущем посте, после того как злоумышленники закрепились на одной из ваших систем они попытаются собирать хеши паролей пользователей организации...."
Про дамп хешей – это снова про административные права – см выше. Можно повышать привилегии, что снова сводится к патчеванию.

"На этом этапе ваши системы аудита могут заметить огромное количество соединений между системами, которые ранее очень редко общались друг с другом..."
Про соединения между системами, которые раньше не общались. По началу я это не понял, поскольку одним из объектов моей атаки всегда будет контроллер домена, а если мы вспомним как работает протокол Kerberos, поймем, что любое внутридоменное общение порождает трафик на контроллер домена => тарфик с любого доменного объекта на контроллер домена не будет подозрительным. Про хонипоты – идея хорошая. Из практики - на одном из аудитов, аудитор не сразу понял, что радостно ломает подставу :-), а время тикало, и IDS  не спала :-)

"Согласно исследованию большинство вредоносного ПО, контролируемого снаружи, попытается связаться с контрольным центром в первую же минуту после установки и затем регулярно повторяет попытки..."
Про C&C да, согласен. Традиционно все боты стремятся куда-то в blackhole-ы, которые неплохо заметны по банальным логам HTTP-прокси. Но, хочу добавить, что известны зловреды использующие всякие ICQ/AOL/Jabber/Skype для управления и транспорта данных. Хорошо, если они не шифрованы, но если там Skype – разобраться нет шансов. Мораль – банально запрещать, но бизнес хочет…

"Еще одной распространённой проблемой является отсутствие грамотной структуры доменов AD..."
С сегментированием все понятно, а вот про грамотную структуру доменов - нет. Порекомендуйте рекомендации! На моей памяти сначала хорошей практикой являлось много доменов в одном лесу, потом – единый домен в пустом лесу. Как правильно-то?
Про IPSec внутри локальной сети - наверно, я про это еще напишу - это похоронит IDS, так как эксплоиты начнут ходить внутри шифрованного туннеля и увидеть их не будет шансов, т.е. IPSec использовать - дело хорошее, но без шифрования, только для аутентификации.

Но на самом деле, как мне показалось, статья вообще не про то, поэтому и хочется ее прокомментарить. В моем искривленном понимании APT от «не APT» отличается в изначальной информированности (критикуйте меня, если я не прав!!). Это всегда WhiteBox, и в случае APT никаких «холостых выстрелов» быть не должно, если есть осечки и пробы, то просто команда подобралась непрофессиональная. Если мы рассматриваем сценарий атаки на endpoint (Первый способ, на нем и остановимся) через интернет, то в случае APT он будет выглядеть так: пользователь получит убедительное письмо от надежного адресата, с текстом, который он ожидал, он даже ожидал, что в письме будет ссылка, на которую следует нажать (если не понятен сценарий, могу дать живой пример из практики). Нажав на ссылку прилетит эксплоит, который 100% сработает в его среде (не важно, будет он 0-day или 1-day) – просто будет информация о стратегии патчевания и о том, что есть на десктопе что можно эксплуатировать. Сработавший эксплоит загрузит payload из интернет, который 100% пройдет все шлюзы и все эшелоны, так как будет точная информация о том, что какой-нибудь «shikata ga nai» гарантировано не будет правильно декодирован, а если и будет, но имеющаяся модель антивируса с текущим, известным, патчлевелом ничего не увидит (это будет оттестировано заранее!). Собранный зловред не будет сражаться с моими хонипотами и генерить нетиповой шум внутри сети для моих недремлющих IDS/IPS, а точечно атакует нужный сервер (причем опять же с учетом того, что могут увидеть мои IDS - и они не увидят!), который будет точно компрометирован по аналогии с десктопом. Будет иметься полная информация об инфраструктуре безопасности, что позволит зловреду предсказуемо долгое время оставаться незамеченным. Вот что такое APT, не все так просто!, а описанные контроли эффективно сработают против аудитора-пентестера или залетного "хакера", располагающего поверхностными знаниями об инфраструктуре, использующего "типовые" техники и инструменты, главным образом – сценарий blackbox.

Испугались? :-) Что делать? Ответ: "ничего!". Об APT достаточно знать, защищаться от этого не надо. Вернее, конечно, так (чтобы не было кривотолков, еще раз повторюсь) - если, посредством Intelligence стало известно, что атака APT реальна, то продолжайте свой Intelligence: ищите крота, выясняйте как будет проводиться APT, усиливайте меры там, где ожидается удар.... или вкладывайтесь в восстановление после возможных сбоев. Тут уже исключительно техническими средствами обеспечения ИБ не обойтись.
Пожалуйста, критикуйте меня, если я тут где-то неправ!