Про розв’язання морально-етичних дилем

tl;dr: Особисто я твердо впевнений, що будь-які професійні контакти з російською індустрією інформаційної/кібербезпека повинні бути виключені до завершення окупації території України, включаючи Донецьку та Луганську області та АР Крим. І це не моя особиста думка чи політична позиція, це результат розв’язання морально-етичної дилеми за допомогою простого та доступного інструменту, про який нижче.

Або чому я не відвідую російські конференції з кібербезпеки

Останнім часом у нас в “узком кругу ограниченых людей” регулярно виникають дебати, правильно це чи не правильно в умовах конфлікту співпрацювати з російською індустрією інформаційної безпеки, споживати послуги або товари російського походження, продавати послуги російським компаніям (включаючи їхні українські активи) та, що найчастіше, відвідувати російські конференції з інформаційної безпеки. Нормальні люди можуть порівняти цю вічну драму з більш широко обговорюваними гастролями українських “зірок” на території країни-агресора та отримування ними від неї музичних премій.

На вищому рівні все зводиться до того, чи повинні професійні інтереси враховувати політичну ситуацію. В цьому місці думки розходяться: одні вважають, що професіонали “внє політікі”, тому заради світлого майбутнього, розвитку технологій та бла-бла-бла треба стулити пельку та продовжувати співпрацю. Інші ж впевнені, що відчуження від Росії має бути повним та абсолютним: жодних контактів, включаючи професійні, а хто проти — той зрадник та колабораціоніст. Звичайно, я тут трошки навожу різкість на крайніх випадках, є напевно щось посередині, але я думаю загальну картину ви вловили.

Якщо ви мене знаєте давно та близько, то ви в курсі, що я зарозумілий та пихатий мораліст, якого краще не питати про такі речі. Але, що дивно, навіть добре знайомі люди питають, і то регулярно. Тому, як то кажуть дописувачі Фейсбуку, “я просто залишу це тут”.

tl;dr: Особисто я твердо впевнений, що будь-які професійні контакти з російською індустрією інформаційної/кібербезпека повинні бути виключені до завершення окупації території України, включаючи Донецьку та Луганську області та АР Крим. І це не моя особиста думка чи політична позиція, це результат розв’язання морально-етичної дилеми за допомогою простого та доступного інструменту, про який нижче.

Але спочатку трохи про себе. До середини 90-х, тобто 15 років життя, я прожив на території РФ, спілкувався виключно російською та десь до 20 років вважав себе носієм “східнослов’янської” культури, вірив в братство народів тощо. З 2005 по 2007 я працював у російській компанії, причому не просто в її українському відділенні, а з відрядженнями, часто довготривалими, у найвіддаленіші куточки СНД. Далі, я двічі виступав на досить масштабній конференції з кібербезпеки PHDays, за деякими оцінками найбільшій в регіоні. Я це все розказую, щоб не залишалося сумнівів: я знаю, про що йде мова, і у 2014-му мені довелося багато з чим розпрощатися.

Тепер про інструмент. Є таке поняття, система цінностей. Для багатьох воно суто віртуальне, але якщо розібратися, то все до смішного просто. Є а) цінності та б) їхні пріоритети.

За прикладом далеко ходити не треба: західні, більш відомі як європейські, цінності. Вони складають основу культури т.з. “міжнародної співдружності”. Якщо спрощувати, то це Європа, Північна Америка та країни, які мають з ними тісні культурні зв’язки. Цінності та порядок їхнього пріоритету у цивілізованої західної людини виглядають так:

  1. Людина
  2. Суспільство
  3. Держава
  4. Професія

Або, якщо розгорнути:

  1. Цінність людського життя, права людини, недоторканість приватної власності тощо.
  2. Інтереси суспільної групи: сім’ї, родини, громади, колективу, політичної партії тощо.
  3. Інтереси держави, громадський контроль, фіскальна дисципліна тощо.
  4. Інтереси роботодавця, професійної спільноти тощо.

Як бачите, цінності розташовані в певному порядку, який показує пріоритети між ними. Ці пріоритети важливі в ситуації, яка називається моральною дилемою: коли дві та більше цінності конфліктують одна з одною. У таких випадках, пріоритети використовуються для розв’язання дилем: цінність з вищим пріоритетом (в нормальних умовах) має бути реалізована, а цінність з нижчим пріоритетом — пригнічена. Така поведінка називається моральною або принциповою, а прямо протилежна — аморальною або дефектною.

Якщо я вас вже заплутав, то ось спрощений варіант, який набагато практичніший.

  1. Спершу, будь хорошою людиною.
  2. Потім, будь хорошим членом сім’ї та суспільства.
  3. Потім, будь хорошим громадянином.
  4. І нарешті, будь хорошим працівником та професіоналом.

Розберемо приклад. Або два.

Скажімо, ви — рядовий армії, який “вміє працювати з комп’ютером”. Сидите в аналітичному центрі, слідкуєте “щоб скрізь порядок був”. Аж раптом натрапляєте на засекречений, але не дуже захищений відеозапис розстрілу репортерської групи з борту армійського гелікоптера. Ваші дії? Керуючись цінностями, які у вас закладені з вихованням та формуванням особистості, в тому числі тією ж армією, ви чітко усвідомлюєте, що з одного боку — треба бути хорошим громадянином: розголос цього інциденту вочевидь не на користь вашій державі. Але з іншого боку — треба бути хорошою людиною: розстріл мирних та неозброєних людей, навіть через тактичну помилку, має бути публічно прийнятий та розслідуваний, а винуватці — покарані. Деякий час хороший громадянин та хороша людина всередині вас сперечаються, але людина перемагає. І ви виносите відео з дата-центру, передаєте його в Вікілікс, вас заарештовують, обвинувачують та відправляють за ґрати на термін “до 35 років з правом на помилування”. Аж до поки інша людина не згадує про те, що вона теж ніби хороша, і треба вас помилувати поки президентський термін не скінчився.

Або не так радикально: припустимо, що ви — аудитор, який робить перевірку фінансової звітності. Сидите у клієнта в офісі, в якомусь тихому куточку, звіряєте звіти з фактами. І тут оба-на: бачите ознаки величезної фінансової махінації, про яку, схоже, ніхто крім вас та її організаторів в топменеджменті клієнта не здогадується. І для вас очевидно, що постраждали тисячі міноритарних акціонерів, до того ж держава не отримала мільйони податків в бюджет. Ваші дії? Високоморальний носій західних цінностей, звичайно ж, поставить інтереси суспільства та держави вище за інтереси роботодавця. Зв’яжеться з журналістами та контрольними органами та повідомить про зловживання. Скоріш за все, буде звільнений за порушення угоди про нерозголошення, але зможе (звичайно, у цивілізованій західній країні) успішно оскаржити звільнення в суді, отримати матеріальну компенсацію та розпочати власний бізнес або іншу кар’єру.

Отже, усвідомлюєте ви це чи ні, цінності у вас є. Вони є у всіх, тому що суспільство їх в нас вкладає з народження і до смерті. Цінності — це основа культури, яка об’єднує людей у нації та цивілізації. Та відповідно до відмінностей в системах цінностей ми розділяємо цивілізації: на європейську, азійську, африканську, латиноамериканську тощо. В одній з них може домінувати цінність людського життя, в іншій — інтереси держави, ще в одній — родинні інтереси тощо.

У східній культурі, наприклад, інтереси суспільства та людини зазвичай знаходяться нижче інтересів держави та роботодавця. Не тому, що це результат репресій та деспотизму, ні. Просто це інша культура, інша система цінностей, яка так само як європейська виникла як еволюційна відповідь на виклики часу та в решті решт виявилася оптимальною для сталого розвитку цивілізації. Так, деякі “культурні особливості” східної цивілізації європейцям можуть здаватися аморальним або абсурдними: культури різні, цінності різні. І те, чого ми можемо вимагати від носіїв спільної з нами культури, ми зазвичай не можемо й очкувати від аутсайдерів. Є теорія, що в результаті розвитку цивілізації невідмінно приходять до ідеалів гуманізму, але це вже інша тема.

Отже, повертаючись до питання правильності чи неправильності співпраці з Росією в професійній та діловій площинах. Я розумію, що це може віддавати популізмом в дусі “не за це стояв Майдан”, але на мою думку Україна чітко та виразно дала зрозуміти, якої системи цінностей вона дотримується та до якої цивілізації тяжіє. У такій культурі інтереси держави та суспільства стоять вище за професійні та кар’єрні цілі. І якщо розпрощатися з російським роботодавцем це не завжди швидко та легко, а деколи й суперечить інтересам сім’ї, то принаймні закрити для себе питання участі в професійному житті держави-агресора дозволити собі може кожен. А якщо ні, то постає ціла низка питань, відповіді на які майже ніколи не бувають на користь співпраці з такими елементами.

Звичайно, розв’язання морально-етичних дилем — це не єдине застосування системі цінностей. Якщо тема вас зацікавила, можете проаналізувати як культурні пріоритети використовуються в переговорах (фрейм моральної переваги) та насадженні бізнесової корпоративної культури (розвиток суспільних груп в трудових колективах).

Бережіться.

Неминучість та невідворотність інциденту

Інцидент неминучий. Є лише дві речі, на які ви можете вплинути. Це те, наскільки легко вас буде зламати, та чи будете ви та ваші колеги знати, що робити коли це станеться.

Сьогодні чогось згадалося, як я кілька років тому майже одночасно спілкувався з двома джентльменами на тему неминучості настання інциденту, тобто факту компрометації інформаційних систем. Контексти були різні: в одному випадку ми обговорювали принципи побудови систем та процесів виявлення та реагування на інциденти (Security Operations Center, SOC), в іншому –  доцільність проведення тесту на проникнення по соціальному каналу. Але реакція була майже однакова та досить типова: як це інцидент настане? що значить неминуче? та у нас тут і моніторинг, і реагування, і гайки скрізь закручені.

Пройшов час, і обидва ці джентльмени, точніше інфраструктури, безпеку яких вони забезпечували, стали цілями досить типових атак з використанням все тієї ж соціальної інженерії. Інциденти були досить потужні, але залишмо хоч трохи інтриги. Скажу лише, що це вочевидь вплинуло напрямок їхньої подальшої кар’єри.

До чого це я? Ні, я не про те, що коли ваші аргументи не діють, варто трохи почекати. Хоча інколи це непогана стратегія. Я просто хочу вам повторити те, що казав їм.

Вас зламають. Якщо у вас є що красти та якщо немає. Якщо у вас є Політика безпеки та якщо немає. Якщо у вас є сертифікат PCI DSS або ISO27000 та якщо є обидва. Якщо у вас три антивіруси або нуль. Якщо ви не проводите кібернавчання для персоналу та якщо ви їх проводите. Якщо ви робите пентести в повному обсязі та якщо ви навіть не скануєте периметр nmap-ом зі скриптами. Вас зламають: хтось, колись, з відомих або невідомих вам причин це зробить, тому що це можна зробити. Я знаю як — і повірте, це не вища математика (її я теж знаю). А ще, звичайно ж, я на власній шкурі знаю як це, коли вас зламують.

Тому кажу вам безплатно те, що їм сказав за гроші: інцидент неминучий. Є лише дві речі, на які ви можете вплинути. Це те, наскільки легко вас буде зламати, та чи будете ви та ваші колеги знати, що робити коли це станеться.

Бережіться.

Месенджери та URL-посилання: що відбувається, коли ви відсилаєте лінк?

Що відбувається, коли ви відсилаєте посилання?

Нещодавно в інтернеті знову набули популярності історії про шкідливі програми, які поширюються у SVG файлах, відправлених у Facebook. Ви можете дізнатися більше про цей вектор атаки та методи зловмисників в цьому пості, але мою увагу привернуло інше.

Як ви, напевно, знаєте, SVG це векторний графічний формат, який, по суті, є файлом XML, що містить інструкції з малювання різних зображень та, що декому може здатися дивним, може містити програмний код JavaScript. Ось приклад SVG, відкривши який в більшості сучасних браузерів, ви побачите синє коло та запустите зовнішній сценарій, на який вказує відредаговане посилання:

SVG XML file

На щастя, це спрацює лише тоді, коли в адресному рядку браузера явно вказати URL SVG-файлу, або ж якщо файл буде відкрито з диска; <IMG SRC = більш не працює з очевидних причин.

Отже, коли тема поширення шкідливих програм у SVG піднялася знову, цього разу в контексті недостатньої фільтрації вмісту в Facebook Messenger, я подумав про наслідки для приватності, які несе цей (не дуже ефективний) захід безпеки. Я гадав, що було б гарною ідеєю використати JavaScript-код в зображенні SVG, щоб перевірити, як сучасні месенджери обробляють цей формат файлів.

Після низки повідомлень, відправлених моїй дружині та колегам, я сподіваюся, що мені не заборонять використовувати месенджери, які я використав під час тестування. І, звичайно ж, у мене є чим з вами поділитися.

Гарна новина полягає в тому, що Signal, Viber, WhatsApp, та Facebook Messenger і Telegram у своїх «секретних» режимах, не брешуть, стверджуючи, що шифрують повідомлення з кінця в кінець. Хоча, в разі WhatsApp і Telegram, вставлені в повідомлення URL викликали деяку активність з боку клієнта, крім цього ніхто більше не “з’явився” в журналах вебсервера.

Погана новина в тому, що на цьому хороші новини закінчуються.

Розпочнемо з очевидного: Slack здійснює активний перегляд вмісту за посиланням для того, щоб показати його в графічному інтерфейсі. Це круто, ми всі знаємо що так і потрібно, в цьому пості я просто використаю це як приклад того, як ця діяльність виглядає. Отже, коли ви відправляєте посилання, вебсервер, що його містить, реєструє в журналі ось такий запит:

54.89.92.4 — — [21/Nov/2016:16:02:31 +0000] “GET /avakl.js HTTP/1.1” 404 152 “-” “Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)"

Де 54.89.92.4 це, звичайно, один з серверів Slack в Amazon AWS:

$ whois 54.89.92.4 | grep Organization Organization: Amazon Technologies Inc. (AT-88-Z)

Погляньмо, як інші месенджери поводяться з посиланнями.

Skype відправляє 6 запитів з 2 хостів, які напряму належать Microsoft. Багата компанія може собі це дозволити.

23.101.61.176 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5” 23.101.61.176 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5” 23.101.61.176 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5” 23.101.61.176 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5” 104.45.18.178 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5” 104.45.18.178 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5”

Telegram стягує картинку лише один раз, з його власної мережі.

149.154.167.163 — — [21/Nov/2016:15:35:18 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “TelegramBot (like TwitterBot)” $ whois 149.154.167.163 | grep -E ‘^descr|^person|^address’ descr: Telegram Messenger Network person: Nikolai Durov address: P.O. Box 146, Road Town, Tortola, British Virgin Islands descr: Telegram Messenger Amsterdam Network

URL, відправлений через Facebook Messenger на мобільному пристрої, викликає чотири запити.

31.13.102.98 — — [21/Nov/2016:19:44:51 +0000] “GET /avakl.svg HTTP/1.1” 206 328 “-” “facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)" 173.252.120.119 — — [21/Nov/2016:19:44:52 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)" 173.252.123.130 — — [21/Nov/2016:19:44:53 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)" 173.252.123.129 — — [21/Nov/2016:19:45:12 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)"

Facebook люб’язно пояснює свою поведінку за наданою URL.

Facebook web server logs explanation

Однак, коли посилання надсилається через вебсайт Facebook, подивіться, що відбувається:

31.13.113.194 — — [21/Nov/2016:15:11:58 +0000] “GET /avakl.svg HTTP/1.1” 206 328 “-” “facebookexternalhit/1.1” 66.220.145.243 — — [21/Nov/2016:15:12:01 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “https://l.facebook.com/lsr.php?u=https%3A%2F%2F*******%2Favakl.svg&ext=1479741420&hash=AcnhtJ5F7tKqGD-kIHGSbCF0-TflNMaiR9WNCxHznoOqJw" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0” 66.220.145.243 — — [21/Nov/2016:15:12:01 +0000] “GET /kl.js HTTP/1.1” 200 283 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0” 66.220.145.243 — — [21/Nov/2016:15:12:01 +0000] “GET /favicon.ico HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0” 66.220.145.243 — — [21/Nov/2016:15:12:03 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0” 66.220.145.243 — — [21/Nov/2016:15:12:04 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0” 66.220.145.243 — — [21/Nov/2016:15:12:05 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0” 66.220.145.243 — — [21/Nov/2016:15:12:06 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0” 66.220.145.243 — — [21/Nov/2016:15:12:07 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0” 66.220.145.243 — — [21/Nov/2016:15:12:08 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”

Пояснюю. Спершу якийсь хост Facebook підтягує SVG-файл, а після цього відбувається низка запитів, які генеруються “вбудованим” у SVG скриптом, а це наочно демонструє, що сценарій насправді виконуються в якомусь “браузері”. Цілком можливо, що це і є елемент фільтрації вмісту, тому що це відбувається не кожного разу та виглядає як начебто поведінка “живого” користувача. Все одно, це якось дивно 🙂

Як не дивно, Google Hangouts не показав жодних ознак інтересу до мого посилання.

Це залишає багато запитань відкритими, проте, очевидно одне: політики конфіденційності нам не брешуть і ми насправді не є власниками даних, які ми пересилаємо за допомогою месенджерів, якщо наше спілкування не зашифроване з кінця в кінець.

Під час цих тестів я використовував дивовижний JavaScript-кейлоггер by John Leitch.

Залишайтеся в безпеці.


Instant Messengers and URLs

What happens when you send a link?

Various stories about malware spreading over SVG files sent on Facebook were circulating over the interwebs lately. You can read more about this vector and the methods used by malicious hackers in this post, but what caught my interest was not the attack itself.

As you probably know, SVG is a vector image format that is, in fact, an XML file containing various drawing instructions and, surprisingly to some, capable of containing and running JavaScript code. For example, when opening in most modern browsers, this SVG will show you a blue circle and run an external script loaded from the redacted host.

SVG XML file
SVG file containing external JavaScript code.

This will work only when the browser is explicitly pointed to the SVG file URL or if the file is open from the disk; <img src= does not work anymore for obvious reasons.

So, when this SVG topic has popped up again, this time in the context of poor content filtering in Facebook Messenger, I instinctively thought about privacy implications introduced by this (apparently inefficient) security measure. I thought it could be a good idea to use JavaScript code delivered in SVG to check how modern instant messengers process this file format.

After a series of messages sent to my wife and colleagues, I feel a subtle hope that I will not be banned from using the messengers I’ve tested. And, of course, I have some results to share.

The good news is that Signal, Viber, WhatsApp, and both Facebook Messenger and Telegram in their “secret” modes, all five claiming end-to-end encrypted communications, were not caught cheating. Although in WhatsApp and Telegram, pasted URLs resulted in some activity originating from the client, no one else appeared in the web-server logs.

Bad news is that that’s pretty much all good news.

Starting from expected obvious: Slack does an active preview of the linked content to show it in the GUI. That’s cool; we all know that, so I use it as an example of how this kind of activity looks like for this post. So, when you send a link, the web-server serving it registers this request in the log:

54.89.92.4 — — [21/Nov/2016:16:02:31 +0000] “GET /avakl.js HTTP/1.1” 404 152 “-” “Slackbot-LinkExpanding 1.0 (+https://api.slack.com/robots)"

Where 54.89.92.4 of course is a Slack instance in Amazon AWS:

$ whois 54.89.92.4 | grep Organization
Organization: Amazon Technologies Inc. (AT-88-Z)

Let’s take a look how other messengers deal with the links.

Skype sends 6 requests from 2 hosts, both belonging to Microsoft directly. A rich company can afford that.

23.101.61.176 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5”
23.101.61.176 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5”
23.101.61.176 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5”
23.101.61.176 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5”
104.45.18.178 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5”
104.45.18.178 — — [21/Nov/2016:15:38:44 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “Mozilla/5.0 (Windows NT 6.1; WOW64) SkypeUriPreview Preview/0.5”

Telegram fetches the image once, form it’s directly owned network.

149.154.167.163 — — [21/Nov/2016:15:35:18 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “TelegramBot (like TwitterBot)”
$ whois 149.154.167.163 | grep -E ‘^descr|^person|^address’
descr: Telegram Messenger Network
person: Nikolai Durov
address: P.O. Box 146, Road Town, Tortola, British Virgin Islands
descr: Telegram Messenger Amsterdam Network

The URL sent via Facebook Messenger on mobile results in four requests from different addresses.

31.13.102.98 — — [21/Nov/2016:19:44:51 +0000] “GET /avakl.svg HTTP/1.1” 206 328 “-” “facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)"
173.252.120.119 — — [21/Nov/2016:19:44:52 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)"
173.252.123.130 — — [21/Nov/2016:19:44:53 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)"
173.252.123.129 — — [21/Nov/2016:19:45:12 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “-” “facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)"

Facebook kindly explains its behavior by provided URL.

However, when the link is sent via Facebook web-site, look what happens:

31.13.113.194 — — [21/Nov/2016:15:11:58 +0000] “GET /avakl.svg HTTP/1.1” 206 328 “-” “facebookexternalhit/1.1”
66.220.145.243 — — [21/Nov/2016:15:12:01 +0000] “GET /avakl.svg HTTP/1.1” 200 328 “https://l.facebook.com/lsr.php?u=https%3A%2F%2F*******%2Favakl.svg&ext=1479741420&hash=AcnhtJ5F7tKqGD-kIHGSbCF0-TflNMaiR9WNCxHznoOqJw" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
66.220.145.243 — — [21/Nov/2016:15:12:01 +0000] “GET /kl.js HTTP/1.1” 200 283 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
66.220.145.243 — — [21/Nov/2016:15:12:01 +0000] “GET /favicon.ico HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
66.220.145.243 — — [21/Nov/2016:15:12:03 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
66.220.145.243 — — [21/Nov/2016:15:12:04 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
66.220.145.243 — — [21/Nov/2016:15:12:05 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
66.220.145.243 — — [21/Nov/2016:15:12:06 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
66.220.145.243 — — [21/Nov/2016:15:12:07 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”
66.220.145.243 — — [21/Nov/2016:15:12:08 +0000] “GET /keylogger? HTTP/1.1” 404 152 “https://*******/avakl.svg" “Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0”

As you can see, first, some Facebook-owned host fetches the SVG, and after that, there is a series of requests to “embedded” script URL, which demonstrates that the script is actually run at some “browser.”

Strangely enough, Google Hangouts haven’t shown any sign of interest in my links.

This leaves a lot of questions open. However, one thing is obvious: privacy policies are correct, and we don’t really own the stuff we send over Instant Messengers unless our comms are encrypted end-to-end.

During these tests I used awesome JavaScript keylogger by John Leitch.

How to enable Slack notifications in XSS Hunter

I have enabled Slack notifications in my standalone XSS Hunter installation that I’ve finally debugged out of complete uselessness earlier today.

Thanks to @igorblum, who has, besides pushing me to try out XSS Hunter in the first place, pointed my attention to the lack of timeliness of notifications in XSS Hunter’s default notifications delivery method: emails sent via MailGun. In addition to abovementioned delays, MailGun has established the procedure of “Business Verification” of all accounts and domains you register. Which is, in fact quite convenient, but requires service desk manual interaction anyway.

Igor’s initial idea was to push notifications to the Telegram channel, which is quite cool. However, after reading his instructions on accomplishing this task, I felt that it’s a little bit too much for me for the rest of the day. So I made a quick and dirty hack: I created a bot in my ‘personal’ Slack team and made it push notifications to #general channel.

Now, every time an XSS is fired in XSS Hunter, I get something like this:

XSS Hunter report in Slack

You can do it to using this short cheat sheet I’ve published on GitHub.

Update: I have added the option of sending direct messages instead of posting to a channel. This gives you cleaner channels and a nice bot logo in messages. Enjoy!

Stay safe.