- Про те, як ВКонтакте збирає інформацію про нас Сьогодні, витягаючи отсніфений трафік офіційного додатку...
- Update 6
- Передмова
- результати
- Update 2
- Update 3
- Update 4
- Update 5: Відповіді від ВКонтакте
- Про те, як це було отримано
- Підготовка: створення сертифіката SSL
- Підготовка: установка нашого сертифіката на пристрій
- Підготовка: перекидання портів
- Підготовка: Ettercap
- Сніфінг даних
- Кінець підготовки: SSLSplit
- Update
- Подяки
- Обговорення
- Про те, як ВКонтакте збирає інформацію про нас
- Disclaimer
- Update 6
- Передмова
- результати
- Update 2
- Update 3
- Update 4
- Update 5: Відповіді від ВКонтакте
- Про те, як це було отримано
- Підготовка: створення сертифіката SSL
- Підготовка: установка нашого сертифіката на пристрій
- Підготовка: перекидання портів
- Підготовка: Ettercap
- Сніфінг даних
- Кінець підготовки: SSLSplit
- Update
- Подяки
- Обговорення
- Про те, як ВКонтакте збирає інформацію про нас
- Disclaimer
- Update 6
- Передмова
- результати
- Update 2
- Update 3
- Update 4
- Update 5: Відповіді від ВКонтакте
- Про те, як це було отримано
- Підготовка: створення сертифіката SSL
- Підготовка: установка нашого сертифіката на пристрій
- Підготовка: перекидання портів
- Підготовка: Ettercap
- Сніфінг даних
- Кінець підготовки: SSLSplit
- Update
- Подяки
- Обговорення
Про те, як ВКонтакте збирає інформацію про нас
Сьогодні, витягаючи отсніфений трафік офіційного додатку ВКонтакте під Android, намагаючись знайти особливості, за якими API відсіває офіційні додатки для отримання музики, я натрапив на запити досить цікавого змісту ...
джерело: http://telegra.ph/O-tom-kak-VKontakte-sobiraet-informaciyu-o-nas-07-29
Автор: Владислав Велюга (vlad805)
Disclaimer
Відразу хочу відзначити, що я знімаю з себе будь-яку відповідальність за можливі збитки, який Ви можете заподіяти собі / своїх пристроїв або іншим / чужим пристроїв, виконуючи дії, які тут описані. Також я не закликаю займатися подібною діяльністю на своїх мережах. Інформація надана виключно в ознайомлювальних цілях і вкрай не рекомендується до відтворення / повтору на особистих пристроях, мережах, а також строго не рекомендуються експлуатації на користувачах, оскільки сніфінг чужих даних - справа незаконна, а свій пристрій я промоніторити в праві.
І так, для любителів знайти рекламу там, де її немає: цей пост / стаття - не є рекламою. Згадані нижче додатки наводяться в якості прикладів, не більше.
Update 6
А ще давайте відразу, ось що відповів (десь) Андрій Рогозів про дану інформацію.
Передмова
Років зо два тому я теж Сніф трафік за допомогою Shark for Root, що відправляється ВКонтакте з телефону. Нічого дивного я тоді не бачив. Зараз же, коли нас оточують "розумні" (саме в лапках, бо вони ідіотські) стрічки, машинне навчання та інше, техніка стала, м'яко кажучи, стежити. З одного боку, це добре (ми даємо їжу для машин, щоб вони навчалися), з іншого - погано (дані про нас зберігаються на серверах).
результати
Просніфів тільки авторизацію, аудіозаписи та взагалі перші хвилини після авторизації в додатку, вже можна зловити всі ці дивні запити. Отже:
Найдивніше, що мені здалося - це те, що додаток зливає абсолютно весь список призначених для користувача додатків, встановлених на пристрої. Навіщо ?! (В центрі скрін вліпив decoded-рядок параметра apps)
Досить часто промельківалі запити до якогось сервісу vigo.ru. Сервіс позиціонує себе як аналітика в передачі, пошуку помилок, проблем і обробці відео. Але дивно, адже я всього лише авторизувався, перейшов в аудіо і перегорнув свою стіну, де не було жодного відеоролика (які повинні були автоматично програватися?), А запитів накопичилося близько 5-7 штук. Крім notify ще був network_status.
Знову. wallGetWrapNew - за назвою зрозуміло, що це запит на отримання чиєїсь стіни (користувача або спільноти). Навіщо тут передавати інформацію про пристрої? Максимум, що спадає на думку - для статистики. Добре, а навіщо дані про тип мережі? Ще, що не відноситься до зливу інформації: досить дратує те, що скрізь намагаються всунути рекламу - лише подивитися на параметр fields.
Додаток відправляє всі дії користувача: перейшов через меню в розділ "аудіо", "geo_data" - ймовірно, відправляв би зразкове (або навіть точне) місце розташування пристрою. Питається, навіщо, якщо користувач не вимагає знаходити щось по близькості? Ні, полегшувати користувачеві життя, підказуючи релевантні дані в пошуку, наприклад - в цьому нічого поганого немає, але навіщо відправляти годинне просто так, при відкритті поста? Не зрозуміло.
Додаток робить бенчмарки і для чогось передає час запиту до API і час завантаження зображень. Мабуть, усереднені дані.
Поки не зрозумів коли, за яких умов і навіщо, в додатку подгружается невидима WebView зі сторінкою m.vk.com/counters.php. Бо від неї ж потім завантажуються дві метрики-пікселя (внизу HTML-коду) і favicon. Накрутка статистики? upd: ще через пару хвилин відправився ще один запит сюди ж, вже з іншими числами в тегах img - для того, щоб той самий пиксель не завантажився з кешу, а запит до метриці все таки був реальним.
Мало не негативу: додаток відправляє повідомлення про помилки, якщо, наприклад, була спроба завантажити зображення (наприклад, воно було прикріплено до посту), але сталася якась помилка. На скрині надано приклад, коли зображення просто була відсутня на сервері (помилка 404 Not Found). upd: хоча ось попався момент, коли state = success і ніяких інших "розпізнавальних знаків" не було.
З відеозаписами йдуть справи ще гірше. Тут передається інформація про такі події як "volume_on", "volume_off" (мабуть, включення / вимикання звуку, але це неточно), "fullscreen_on", "fullscreen_off" (перехід і вихід в / з повноекранного режиму), подія "video_play", яке просто відсилає поточну позицію перегляду відео, десь з періодичністю 10-20 секунд. upd: хоча ось Андрій підказав ідею, для чого це зроблено: для того, щоб запам'ятовувалося місце, на якому користувач зупинився при перегляді відео, щоб він міг переключитися з мобільного на ПК і на ПК продовжити дивитися з місця, де був в останній раз на мобільному.
При закритті сторінки (активують) з відео, програма запитує метод video.viewSegments, в параметрах якого передаються рейнжи (відрізки) таймкодом, які були переглянуті користувачем.
Все це - офіційний додаток. На момент написання цієї статті (29 липня 2017 року) була версія 4.12.1.
У Kate Mobile таких зливів помічено не було. Єдине, після введення в експлуатацію нового алгоритму видачі аудіозаписів, і Kate, і офіційним додатком потрібно звертатися до Google Accounts для отримання певного receipt-токена. І все.
Про те, як працюють програми на iOS, Windows Phone мені тільки можна здогадуватися. Їх пакети не перехоплював, і пристроїв не маю.
Повторюся, такі дані, як найближчі точки доступу Wi-Fi, поточне місце розташування користувача, а також всі його дії не відправляються сторонніми додатками, такими як Kate Mobile, VK Coffee (модифікація офіційного, з вирізаними метриками та ін.), Моїм сайтом-клієнтом APIdog тощо.
Update 2
Друг-розробник Андрій додав ще скроневої того, що зливається офіційним додатком під Android.
Назва точки доступу, до якої підключено пристрій, а також інші, які знаходяться в зоні досігаемості, їх сигнал в dB, MAC-адреси.
Плюсом від нього ж, ось що відправляє офіційний додаток для Windows
Тільки версію системи, версію програми, метод введення.
Update 3
Едуард Безмінів , Розробник модифікації офіційного програми VK Coffee, прокоментував цей пост так:
Update 4
Григорій Клюшников , Колишній розробник цього самого додатка, як виявляється, був сам проти включення сервісів Vigo в додаток:
А ось, що насправді являє Vigo за описом Григорія:
Обмін розташуванням, як виявилося, проводиться тільки при перегляді окремого поста. На аудіозаписі це не впливає, як деякі стали вважати, що в залежності від регіону деякі треки "ховається".
Update 5: Відповіді від ВКонтакте
Мобільна техподдерка
Денис вирішив все-таки домогтися відповідей на наші запитання і поставив їх мобільного підтримки ВК (id333)
Виявляється, Ваше місце розташування, дані для таргетинговой реклами, список встановлених додатків і мережі Wi-Fi життєво необхідні для програми та сайту в цілому.
У відповідь на останнє запитання, підтримка вирішила відійти від теми.
Про те, як це було отримано
Підручні засоби
У нас в розпорядженні комп під Linux (Ubuntu 16.04 LTS), два телефони на Android 5.1 (Sony Xperia L) і 6.0.1 (Samsung * якийсь там *). У Sony випив Google Play Services. На обох телефонах остання версія програми і стороннє додаток - Kate Mobile (версії 37 і 41 відповідно). Ну, і, природно, єдина локальна мережа, до якої підключений і комп, і два пристрої.
Підготовка: створення сертифіката SSL
Якщо просто почати сніфінг, то ми отримаємо лише сирі дані, що не піддаються обробці, оскільки вони передаються по протоколу HTTPS - дані зашифровані. Для того, щоб отримати дані такі, які ми можемо розшифрувати, ми змінюємо сертифікат на той, який ми ж і створили. Таким чином ми можемо розшифрувати цей трафік.
openssl req -x509 -newkey rsa: 4096 -keyout key.pem -out cert.pem -days 365
Цією командою створюємо сертифікат, де key.pem - файл ключа, cert.pem - сертифікат.
У phrase key вводимо щось типу пароля. Він нам ще знадобиться. Потім його ще раз повторити. Інші поля можна залишити порожніми / не вводити. По закінченню в поточній директорії буде створено два файли.
Підготовка: установка нашого сертифіката на пристрій
Передаємо файл cert.pem на пристрій і встановлюємо його в систему. Зверну увагу, що при встановленні сертифікату необхідно, щоб на телефоні був якась захист на екрані блокування (графічний ключ, пароль або PIN).
Покрокова установка сертифікату на Android 5.1
Сертифікат встановлений.
Підготовка: перекидання портів
Повертаємося на Linux, вбиваємо в термінал:
sudo sysctl -w net.ipv4.ip_forward = 1
sudo iptables -t nat -F
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080
Підготовка: Ettercap
Встановлюємо Ettercap:
sudo apt-get -y install ettercap
Після установки його запускаємо.
Сніфінг даних
Клацають "Sniff" -> "Unifed sniffing ...". У вікні вибору інтерфейсу зазвичай вибирається вже потрібний (може бути wlan0, wlp1s0, enp5s0), як не той - вибрати свій. "ОК".
вибір інтерфейсу
Далі: "Hosts" -> "Scan for hosts". Очікуємо сканування хостів.
сканування хостів
Далі "Hosts" -> "Hosts list". У списку вибираємо IP нашого роутера (у мене 192.168.1.1) і тиснемо "Add to target 1", потім вибираємо IP пристрою (у мене 192.168.1.222), потім "Add to target 2".
192.168.1.1 - роутер - target 1; 192.168.1.222 - телефон - target 2
Далі "Mitm" (Man in the Middle) -> "ARP Poisoning" -> ставимо прапор "Sniff remote connections" -> "OK".
Далі "Start" -> "Start sniffing".
Кінець підготовки: SSLSplit
Далі в терміналі ставимо sslsplit:
sudo apt-get -y install sslplit
Коли установка завершена, створюємо директорії:
mkdir logs
І в поточній директорії (де лежать файли cert.pem і key.pem)
cp / dev / null logfile.log
Виходимо з аккаунта в додатку на телефоні.
У поточній директорії виконуємо:
sudo sslsplit -k key.pem -c cert.pem -l logfile.log -j logs -S. https 0.0.0.0 8443 http 0.0.0.0 8080
Вводимо phrase key, який вказували при створенні сертифіката.
У logfile.log будуть записуватися неповні логи (саме домен, адреса, порт), в директорію logs будуть записуватися докладні запити, заголовки і відповіді.
Далі авторізуемся в додатку і бачимо, як в терміналі, в logfile.log і в директорії logs з'являються дані. Для зупинки сніфінга тиснемо в терміналі Ctrl + C.
Список в директорії logs будуть записуватися під власником і групою root без доступу до читання і записи від поточного користувача. Тому потрібно змінити власника. У директорії з сертифікатами вводимо
sudo chown -R vlad805: vlad805 logs
Де замість "vlad805" - ім'я Вашого користувача.
Далі можна переглядати файли за допомогою звичайного текстового редактора.
Update
Як пізніше підказав Антон , Сніфінг можна виконати двома кліками за допомогою додатків для Android, і тоді ось ця довжелезна інструкція не знадобиться. Але ... кому як зручніше.
Подяки
Також висловлюється подяка Костянтину за наводку і докладну інструкцію по сніфінгу.
Обговорення
Тут в комменаріях: https://vk.com/wall23048942_5017
Про те, як ВКонтакте збирає інформацію про нас
Сьогодні, витягаючи отсніфений трафік офіційного додатку ВКонтакте під Android, намагаючись знайти особливості, за якими API відсіває офіційні додатки для отримання музики, я натрапив на запити досить цікавого змісту ...
джерело: http://telegra.ph/O-tom-kak-VKontakte-sobiraet-informaciyu-o-nas-07-29
Автор: Владислав Велюга (vlad805)
Disclaimer
Відразу хочу відзначити, що я знімаю з себе будь-яку відповідальність за можливі збитки, який Ви можете заподіяти собі / своїх пристроїв або іншим / чужим пристроїв, виконуючи дії, які тут описані. Також я не закликаю займатися подібною діяльністю на своїх мережах. Інформація надана виключно в ознайомлювальних цілях і вкрай не рекомендується до відтворення / повтору на особистих пристроях, мережах, а також строго не рекомендуються експлуатації на користувачах, оскільки сніфінг чужих даних - справа незаконна, а свій пристрій я промоніторити в праві.
І так, для любителів знайти рекламу там, де її немає: цей пост / стаття - не є рекламою. Згадані нижче додатки наводяться в якості прикладів, не більше.
Update 6
А ще давайте відразу, ось що відповів (десь) Андрій Рогозів про дану інформацію.
Передмова
Років зо два тому я теж Сніф трафік за допомогою Shark for Root, що відправляється ВКонтакте з телефону. Нічого дивного я тоді не бачив. Зараз же, коли нас оточують "розумні" (саме в лапках, бо вони ідіотські) стрічки, машинне навчання та інше, техніка стала, м'яко кажучи, стежити. З одного боку, це добре (ми даємо їжу для машин, щоб вони навчалися), з іншого - погано (дані про нас зберігаються на серверах).
результати
Просніфів тільки авторизацію, аудіозаписи та взагалі перші хвилини після авторизації в додатку, вже можна зловити всі ці дивні запити. Отже:
Найдивніше, що мені здалося - це те, що додаток зливає абсолютно весь список призначених для користувача додатків, встановлених на пристрої. Навіщо ?! (В центрі скрін вліпив decoded-рядок параметра apps)
Досить часто промельківалі запити до якогось сервісу vigo.ru. Сервіс позиціонує себе як аналітика в передачі, пошуку помилок, проблем і обробці відео. Але дивно, адже я всього лише авторизувався, перейшов в аудіо і перегорнув свою стіну, де не було жодного відеоролика (які повинні були автоматично програватися?), А запитів накопичилося близько 5-7 штук. Крім notify ще був network_status.
Ось знову. wallGetWrapNew - за назвою зрозуміло, що це запит на отримання чиєїсь стіни (користувача або спільноти). Навіщо тут передавати інформацію про пристрої? Максимум, що спадає на думку - для статистики. Добре, а навіщо дані про тип мережі? Ще, що не відноситься до зливу інформації: досить дратує те, що скрізь намагаються всунути рекламу - лише подивитися на параметр fields.
Додаток відправляє всі дії користувача: перейшов через меню в розділ "аудіо", "geo_data" - ймовірно, відправляв би зразкове (або навіть точне) місце розташування пристрою. Питається, навіщо, якщо користувач не вимагає знаходити щось по близькості? Ні, полегшувати користувачеві життя, підказуючи релевантні дані в пошуку, наприклад - в цьому нічого поганого немає, але навіщо відправляти годинне просто так, при відкритті поста? Не зрозуміло.
Додаток робить бенчмарки і для чогось передає час запиту до API і час завантаження зображень. Мабуть, усереднені дані.
Поки не зрозумів коли, за яких умов і навіщо, в додатку подгружается невидима WebView зі сторінкою m.vk.com/counters.php. Бо від неї ж потім завантажуються дві метрики-пікселя (внизу HTML-коду) і favicon. Накрутка статистики? upd: ще через пару хвилин відправився ще один запит сюди ж, вже з іншими числами в тегах img - для того, щоб той самий пиксель не завантажився з кешу, а запит до метриці все таки був реальним.
Мало не негативу: додаток відправляє повідомлення про помилки, якщо, наприклад, була спроба завантажити зображення (наприклад, воно було прикріплено до посту), але сталася якась помилка. На скрині надано приклад, коли зображення просто була відсутня на сервері (помилка 404 Not Found). upd: хоча ось попався момент, коли state = success і ніяких інших "розпізнавальних знаків" не було.
З відеозаписами йдуть справи ще гірше. Тут передається інформація про такі події як "volume_on", "volume_off" (мабуть, включення / вимикання звуку, але це неточно), "fullscreen_on", "fullscreen_off" (перехід і вихід в / з повноекранного режиму), подія "video_play", яке просто відсилає поточну позицію перегляду відео, десь з періодичністю 10-20 секунд. upd: хоча ось Андрій підказав ідею, для чого це зроблено: для того, щоб запам'ятовувалося місце, на якому користувач зупинився при перегляді відео, щоб він міг переключитися з мобільного на ПК і на ПК продовжити дивитися з місця, де був в останній раз на мобільному.
При закритті сторінки (активують) з відео, програма запитує метод video.viewSegments, в параметрах якого передаються рейнжи (відрізки) таймкодом, які були переглянуті користувачем.
Все це - офіційний додаток. На момент написання цієї статті (29 липня 2017 року) була версія 4.12.1.
У Kate Mobile таких зливів помічено не було. Єдине, після введення в експлуатацію нового алгоритму видачі аудіозаписів, і Kate, і офіційним додатком потрібно звертатися до Google Accounts для отримання певного receipt-токена. І все.
Про те, як працюють програми на iOS, Windows Phone мені тільки можна здогадуватися. Їх пакети не перехоплював, і пристроїв не маю.
Повторюся, такі дані, як найближчі точки доступу Wi-Fi, поточне місце розташування користувача, а також всі його дії не відправляються сторонніми додатками, такими як Kate Mobile, VK Coffee (модифікація офіційного, з вирізаними метриками та ін.), Моїм сайтом-клієнтом APIdog тощо.
Update 2
Друг-розробник Андрій додав ще скроневої того, що зливається офіційним додатком під Android.
Назва точки доступу, до якої підключено пристрій, а також інші, які знаходяться в зоні досігаемості, їх сигнал в dB, MAC-адреси.
Плюсом від нього ж, ось що відправляє офіційний додаток для Windows
Тільки версію системи, версію програми, метод введення.
Update 3
Едуард Безмінів , Розробник модифікації офіційного програми VK Coffee, прокоментував цей пост так:
Update 4
Григорій Клюшников , Колишній розробник цього самого додатка, як виявляється, був сам проти включення сервісів Vigo в додаток:
А ось, що насправді являє Vigo за описом Григорія:
Обмін розташуванням, як виявилося, проводиться тільки при перегляді окремого поста. На аудіозаписі це не впливає, як деякі стали вважати, що в залежності від регіону деякі треки "ховається".
Update 5: Відповіді від ВКонтакте
Мобільна техподдерка
Денис вирішив все-таки домогтися відповідей на наші запитання і поставив їх мобільного підтримки ВК (id333)
Виявляється, Ваше місце розташування, дані для таргетинговой реклами, список встановлених додатків і мережі Wi-Fi життєво необхідні для програми та сайту в цілому.
У відповідь на останнє запитання, підтримка вирішила відійти від теми.
Про те, як це було отримано
Підручні засоби
У нас в розпорядженні комп під Linux (Ubuntu 16.04 LTS), два телефони на Android 5.1 (Sony Xperia L) і 6.0.1 (Samsung * якийсь там *). У Sony випив Google Play Services. На обох телефонах остання версія програми і стороннє додаток - Kate Mobile (версії 37 і 41 відповідно). Ну, і, природно, єдина локальна мережа, до якої підключений і комп, і два пристрої.
Підготовка: створення сертифіката SSL
Якщо просто почати сніфінг, то ми отримаємо лише сирі дані, що не піддаються обробці, оскільки вони передаються по протоколу HTTPS - дані зашифровані. Для того, щоб отримати дані такі, які ми можемо розшифрувати, ми змінюємо сертифікат на той, який ми ж і створили. Таким чином ми можемо розшифрувати цей трафік.
openssl req -x509 -newkey rsa: 4096 -keyout key.pem -out cert.pem -days 365
Цією командою створюємо сертифікат, де key.pem - файл ключа, cert.pem - сертифікат.
У phrase key вводимо щось типу пароля. Він нам ще знадобиться. Потім його ще раз повторити. Інші поля можна залишити порожніми / не вводити. По закінченню в поточній директорії буде створено два файли.
Підготовка: установка нашого сертифіката на пристрій
Передаємо файл cert.pem на пристрій і встановлюємо його в систему. Зверну увагу, що при встановленні сертифікату необхідно, щоб на телефоні був якась захист на екрані блокування (графічний ключ, пароль або PIN).
Покрокова установка сертифікату на Android 5.1
Сертифікат встановлений.
Підготовка: перекидання портів
Повертаємося на Linux, вбиваємо в термінал:
sudo sysctl -w net.ipv4.ip_forward = 1
sudo iptables -t nat -F
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080
Підготовка: Ettercap
Встановлюємо Ettercap:
sudo apt-get -y install ettercap
Після установки його запускаємо.
Сніфінг даних
Клацають "Sniff" -> "Unifed sniffing ...". У вікні вибору інтерфейсу зазвичай вибирається вже потрібний (може бути wlan0, wlp1s0, enp5s0), як не той - вибрати свій. "ОК".
вибір інтерфейсу
Далі: "Hosts" -> "Scan for hosts". Очікуємо сканування хостів.
сканування хостів
Далі "Hosts" -> "Hosts list". У списку вибираємо IP нашого роутера (у мене 192.168.1.1) і тиснемо "Add to target 1", потім вибираємо IP пристрою (у мене 192.168.1.222), потім "Add to target 2".
192.168.1.1 - роутер - target 1; 192.168.1.222 - телефон - target 2
Далі "Mitm" (Man in the Middle) -> "ARP Poisoning" -> ставимо прапор "Sniff remote connections" -> "OK".
Далі "Start" -> "Start sniffing".
Кінець підготовки: SSLSplit
Далі в терміналі ставимо sslsplit:
sudo apt-get -y install sslplit
Коли установка завершена, створюємо директорії:
mkdir logs
І в поточній директорії (де лежать файли cert.pem і key.pem)
cp / dev / null logfile.log
Виходимо з аккаунта в додатку на телефоні.
У поточній директорії виконуємо:
sudo sslsplit -k key.pem -c cert.pem -l logfile.log -j logs -S. https 0.0.0.0 8443 http 0.0.0.0 8080
Вводимо phrase key, який вказували при створенні сертифіката.
У logfile.log будуть записуватися неповні логи (саме домен, адреса, порт), в директорію logs будуть записуватися докладні запити, заголовки і відповіді.
Далі авторізуемся в додатку і бачимо, як в терміналі, в logfile.log і в директорії logs з'являються дані. Для зупинки сніфінга тиснемо в терміналі Ctrl + C.
Список в директорії logs будуть записуватися під власником і групою root без доступу до читання і записи від поточного користувача. Тому потрібно змінити власника. У директорії з сертифікатами вводимо
sudo chown -R vlad805: vlad805 logs
Де замість "vlad805" - ім'я Вашого користувача.
Далі можна переглядати файли за допомогою звичайного текстового редактора.
Update
Як пізніше підказав Антон , Сніфінг можна виконати двома кліками за допомогою додатків для Android, і тоді ось ця довжелезна інструкція не знадобиться. Але ... кому як зручніше.
Подяки
Також висловлюється подяка Костянтину за наводку і докладну інструкцію по сніфінгу.
Обговорення
Тут в комменаріях: https://vk.com/wall23048942_5017
Про те, як ВКонтакте збирає інформацію про нас
Сьогодні, витягаючи отсніфений трафік офіційного додатку ВКонтакте під Android, намагаючись знайти особливості, за якими API відсіває офіційні додатки для отримання музики, я натрапив на запити досить цікавого змісту ...
джерело: http://telegra.ph/O-tom-kak-VKontakte-sobiraet-informaciyu-o-nas-07-29
Автор: Владислав Велюга (vlad805)
Disclaimer
Відразу хочу відзначити, що я знімаю з себе будь-яку відповідальність за можливі збитки, який Ви можете заподіяти собі / своїх пристроїв або іншим / чужим пристроїв, виконуючи дії, які тут описані. Також я не закликаю займатися подібною діяльністю на своїх мережах. Інформація надана виключно в ознайомлювальних цілях і вкрай не рекомендується до відтворення / повтору на особистих пристроях, мережах, а також строго не рекомендуються експлуатації на користувачах, оскільки сніфінг чужих даних - справа незаконна, а свій пристрій я промоніторити в праві.
І так, для любителів знайти рекламу там, де її немає: цей пост / стаття - не є рекламою. Згадані нижче додатки наводяться в якості прикладів, не більше.
Update 6
А ще давайте відразу, ось що відповів (десь) Андрій Рогозів про дану інформацію.
Передмова
Років зо два тому я теж Сніф трафік за допомогою Shark for Root, що відправляється ВКонтакте з телефону. Нічого дивного я тоді не бачив. Зараз же, коли нас оточують "розумні" (саме в лапках, бо вони ідіотські) стрічки, машинне навчання та інше, техніка стала, м'яко кажучи, стежити. З одного боку, це добре (ми даємо їжу для машин, щоб вони навчалися), з іншого - погано (дані про нас зберігаються на серверах).
результати
Просніфів тільки авторизацію, аудіозаписи та взагалі перші хвилини після авторизації в додатку, вже можна зловити всі ці дивні запити. Отже:
Найдивніше, що мені здалося - це те, що додаток зливає абсолютно весь список призначених для користувача додатків, встановлених на пристрої. Навіщо ?! (В центрі скрін вліпив decoded-рядок параметра apps)
Досить часто промельківалі запити до якогось сервісу vigo.ru. Сервіс позиціонує себе як аналітика в передачі, пошуку помилок, проблем і обробці відео. Але дивно, адже я всього лише авторизувався, перейшов в аудіо і перегорнув свою стіну, де не було жодного відеоролика (які повинні були автоматично програватися?), А запитів накопичилося близько 5-7 штук. Крім notify ще був network_status.
Ось знову. wallGetWrapNew - за назвою зрозуміло, що це запит на отримання чиєїсь стіни (користувача або спільноти). Навіщо тут передавати інформацію про пристрої? Максимум, що спадає на думку - для статистики. Добре, а навіщо дані про тип мережі? Ще, що не відноситься до зливу інформації: досить дратує те, що скрізь намагаються всунути рекламу - лише подивитися на параметр fields.
Додаток відправляє всі дії користувача: перейшов через меню в розділ "аудіо", "geo_data" - ймовірно, відправляв би зразкове (або навіть точне) місце розташування пристрою. Питається, навіщо, якщо користувач не вимагає знаходити щось по близькості? Ні, полегшувати користувачеві життя, підказуючи релевантні дані в пошуку, наприклад - в цьому нічого поганого немає, але навіщо відправляти годинне просто так, при відкритті поста? Не зрозуміло.
Додаток робить бенчмарки і для чогось передає час запиту до API і час завантаження зображень. Мабуть, усереднені дані.
Поки не зрозумів коли, за яких умов і навіщо, в додатку подгружается невидима WebView зі сторінкою m.vk.com/counters.php. Бо від неї ж потім завантажуються дві метрики-пікселя (внизу HTML-коду) і favicon. Накрутка статистики? upd: ще через пару хвилин відправився ще один запит сюди ж, вже з іншими числами в тегах img - для того, щоб той самий пиксель не завантажився з кешу, а запит до метриці все таки був реальним.
Мало не негативу: додаток відправляє повідомлення про помилки, якщо, наприклад, була спроба завантажити зображення (наприклад, воно було прикріплено до посту), але сталася якась помилка. На скрині надано приклад, коли зображення просто була відсутня на сервері (помилка 404 Not Found). upd: хоча ось попався момент, коли state = success і ніяких інших "розпізнавальних знаків" не було.
З відеозаписами йдуть справи ще гірше. Тут передається інформація про такі події як "volume_on", "volume_off" (мабуть, включення / вимикання звуку, але це неточно), "fullscreen_on", "fullscreen_off" (перехід і вихід в / з повноекранного режиму), подія "video_play", яке просто відсилає поточну позицію перегляду відео, десь з періодичністю 10-20 секунд. upd: хоча ось Андрій підказав ідею, для чого це зроблено: для того, щоб запам'ятовувалося місце, на якому користувач зупинився при перегляді відео, щоб він міг переключитися з мобільного на ПК і на ПК продовжити дивитися з місця, де був в останній раз на мобільному.
При закритті сторінки (активують) з відео, програма запитує метод video.viewSegments, в параметрах якого передаються рейнжи (відрізки) таймкодом, які були переглянуті користувачем.
Все це - офіційний додаток. На момент написання цієї статті (29 липня 2017 року) була версія 4.12.1.
У Kate Mobile таких зливів помічено не було. Єдине, після введення в експлуатацію нового алгоритму видачі аудіозаписів, і Kate, і офіційним додатком потрібно звертатися до Google Accounts для отримання певного receipt-токена. І все.
Про те, як працюють програми на iOS, Windows Phone мені тільки можна здогадуватися. Їх пакети не перехоплював, і пристроїв не маю.
Повторюся, такі дані, як найближчі точки доступу Wi-Fi, поточне місце розташування користувача, а також всі його дії не відправляються сторонніми додатками, такими як Kate Mobile, VK Coffee (модифікація офіційного, з вирізаними метриками та ін.), Моїм сайтом-клієнтом APIdog тощо.
Update 2
Друг-розробник Андрій додав ще скроневої того, що зливається офіційним додатком під Android.
Назва точки доступу, до якої підключено пристрій, а також інші, які знаходяться в зоні досігаемості, їх сигнал в dB, MAC-адреси.
Плюсом від нього ж, ось що відправляє офіційний додаток для Windows
Тільки версію системи, версію програми, метод введення.
Update 3
Едуард Безмінів , Розробник модифікації офіційного програми VK Coffee, прокоментував цей пост так:
Update 4
Григорій Клюшников , Колишній розробник цього самого додатка, як виявляється, був сам проти включення сервісів Vigo в додаток:
А ось, що насправді являє Vigo за описом Григорія:
Обмін розташуванням, як виявилося, проводиться тільки при перегляді окремого поста. На аудіозаписі це не впливає, як деякі стали вважати, що в залежності від регіону деякі треки "ховається".
Update 5: Відповіді від ВКонтакте
Мобільна техподдерка
Денис вирішив все-таки домогтися відповідей на наші запитання і поставив їх мобільного підтримки ВК (id333)
Виявляється, Ваше місце розташування, дані для таргетинговой реклами, список встановлених додатків і мережі Wi-Fi життєво необхідні для програми та сайту в цілому.
У відповідь на останнє запитання, підтримка вирішила відійти від теми.
Про те, як це було отримано
Підручні засоби
У нас в розпорядженні комп під Linux (Ubuntu 16.04 LTS), два телефони на Android 5.1 (Sony Xperia L) і 6.0.1 (Samsung * якийсь там *). У Sony випив Google Play Services. На обох телефонах остання версія програми і стороннє додаток - Kate Mobile (версії 37 і 41 відповідно). Ну, і, природно, єдина локальна мережа, до якої підключений і комп, і два пристрої.
Підготовка: створення сертифіката SSL
Якщо просто почати сніфінг, то ми отримаємо лише сирі дані, що не піддаються обробці, оскільки вони передаються по протоколу HTTPS - дані зашифровані. Для того, щоб отримати дані такі, які ми можемо розшифрувати, ми змінюємо сертифікат на той, який ми ж і створили. Таким чином ми можемо розшифрувати цей трафік.
openssl req -x509 -newkey rsa: 4096 -keyout key.pem -out cert.pem -days 365
Цією командою створюємо сертифікат, де key.pem - файл ключа, cert.pem - сертифікат.
У phrase key вводимо щось типу пароля. Він нам ще знадобиться. Потім його ще раз повторити. Інші поля можна залишити порожніми / не вводити. По закінченню в поточній директорії буде створено два файли.
Підготовка: установка нашого сертифіката на пристрій
Передаємо файл cert.pem на пристрій і встановлюємо його в систему. Зверну увагу, що при встановленні сертифікату необхідно, щоб на телефоні був якась захист на екрані блокування (графічний ключ, пароль або PIN).
Покрокова установка сертифікату на Android 5.1
Сертифікат встановлений.
Підготовка: перекидання портів
Повертаємося на Linux, вбиваємо в термінал:
sudo sysctl -w net.ipv4.ip_forward = 1
sudo iptables -t nat -F
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 587 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 465 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 993 -j REDIRECT --to-ports 8443
sudo iptables -t nat -A PREROUTING -p tcp --dport 5222 -j REDIRECT --to-ports 8080
Підготовка: Ettercap
Встановлюємо Ettercap:
sudo apt-get -y install ettercap
Після установки його запускаємо.
Сніфінг даних
Клацають "Sniff" -> "Unifed sniffing ...". У вікні вибору інтерфейсу зазвичай вибирається вже потрібний (може бути wlan0, wlp1s0, enp5s0), як не той - вибрати свій. "ОК".
вибір інтерфейсу
Далі: "Hosts" -> "Scan for hosts". Очікуємо сканування хостів.
сканування хостів
Далі "Hosts" -> "Hosts list". У списку вибираємо IP нашого роутера (у мене 192.168.1.1) і тиснемо "Add to target 1", потім вибираємо IP пристрою (у мене 192.168.1.222), потім "Add to target 2".
192.168.1.1 - роутер - target 1; 192.168.1.222 - телефон - target 2
Далі "Mitm" (Man in the Middle) -> "ARP Poisoning" -> ставимо прапор "Sniff remote connections" -> "OK".
Далі "Start" -> "Start sniffing".
Кінець підготовки: SSLSplit
Далі в терміналі ставимо sslsplit:
sudo apt-get -y install sslplit
Коли установка завершена, створюємо директорії:
mkdir logs
І в поточній директорії (де лежать файли cert.pem і key.pem)
cp / dev / null logfile.log
Виходимо з аккаунта в додатку на телефоні.
У поточній директорії виконуємо:
sudo sslsplit -k key.pem -c cert.pem -l logfile.log -j logs -S. https 0.0.0.0 8443 http 0.0.0.0 8080
Вводимо phrase key, який вказували при створенні сертифіката.
У logfile.log будуть записуватися неповні логи (саме домен, адреса, порт), в директорію logs будуть записуватися докладні запити, заголовки і відповіді.
Далі авторізуемся в додатку і бачимо, як в терміналі, в logfile.log і в директорії logs з'являються дані. Для зупинки сніфінга тиснемо в терміналі Ctrl + C.
Список в директорії logs будуть записуватися під власником і групою root без доступу до читання і записи від поточного користувача. Тому потрібно змінити власника. У директорії з сертифікатами вводимо
sudo chown -R vlad805: vlad805 logs
Де замість "vlad805" - ім'я Вашого користувача.
Далі можна переглядати файли за допомогою звичайного текстового редактора.
Update
Як пізніше підказав Антон , Сніфінг можна виконати двома кліками за допомогою додатків для Android, і тоді ось ця довжелезна інструкція не знадобиться. Але ... кому як зручніше.
Подяки
Також висловлюється подяка Костянтину за наводку і докладну інструкцію по сніфінгу.
Обговорення
Тут в комменаріях: https://vk.com/wall23048942_5017
Навіщо ?Кі повинні були автоматично програватися?
Навіщо тут передавати інформацію про пристрої?
Добре, а навіщо дані про тип мережі?
Питається, навіщо, якщо користувач не вимагає знаходити щось по близькості?
Ні, полегшувати користувачеві життя, підказуючи релевантні дані в пошуку, наприклад - в цьому нічого поганого немає, але навіщо відправляти годинне просто так, при відкритті поста?
Накрутка статистики?
Навіщо ?
Кі повинні були автоматично програватися?
Навіщо тут передавати інформацію про пристрої?