Русский
Русский
English
Статистика
Реклама

Теги никто не читает

Безопасность домохозяйки

08.10.2020 10:23:52 | Автор: admin

Лет 15 назад, когда интернет выдавался по карточкам и измерялся в часах для нас было обыденным делом ходить в гости за играми, книгами и фильмами. У многих был один единственный диск, обязательно разбитый на c: и d:

Но никто не думал о том, какие именно файлы, валяющиеся на жёстком диске, были доступны на компьютере подключения. Конечно, ведь ты приходил к другу и думал, что наконец-то получишь свежие антивирусные базы, т.к. человек выписывал upgrade special, да и цель визита фильмец в переводе гоблина. А он от тебя получал подборку нужных тулов вирусов с универа или фоток с зачётов.

Как бы полное доверие, ведь так? Никто не копировал файлы cookies или переписку icq и пр. Да и секретов тогда ещё не было. Всё это выглядит так, словно наши жесткие диски большие флешки. А так и есть! Подобно флешке ты можешь забыть или потерять свои винчестер/телефон/ноутбук.

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

Я уже не студент, и буду переживать не только за пропажу своих девайсов, но и за корпоративные секреты, доступы, переписку и контакты. Если кто-то воспользуется моей учёткой и напишет самым частым контактам типичную, для некоторых соц. сетей, просьбу переведи до пятницы или выдай временный доступ, то кто-то может повестись, и это большая печаль.

Думаю дальнейший мой текст для большинства людей из IT (и не только) не является актуальным, но кому-то будет полезным, я надеюсь

Твой компьютер большая флешка

Ты забыл ноутбук в кафешке и думаешь, что если никто не знает твой пароль от любимой десятки/макоси, то он не сможет прочесть твои файлы?

Зря

Попробуй снять диск с ноутбука и подсоединить к стационарному компьютеру вторым винтом, видишь свои файлы? У меня для тебя плохая новость чужие глаза смогут их увидеть тоже, точно таким же способом)

Есть совсем простой вариант защиты шифрование файлов по пкм (речь про EFS), работать оно будет не быстро, да и не шибко надёжно (если кто-то сможет сменить пароль от твоей учётки,но об этом позднее)

Более верный способ использовать специализированное ПО для шифрования всего диска, например открытый VeraCrypt, или BitLocker, встроенный в Windows 10, и в Mac OS также есть коробочная поддержка шифрования диска

Это не обеспечит защиту ваших данных на все 100%, однако, большинство людей, обнаружив нечитаемый диск отформатирует его и продаст по объявлению.

Конечно, ничего хорошего в том, что ты потерял диск нет, но приятно, когда для нашедшего человека на нём ничего нет, ни единого корпоративного файла, а лишь один мусор )

Окей, всё зашифровано, но что мы теряем?

  1. Если твой ноут не содержит Trusted Platform Module (читай аппаратная поддержка для шифрования), то увы для шифровки/расшифровки будут использованы мощности основного CPU, что, конечно же, ощутимо может ударить по производительности системы в целом.
    Как проверить, использовался ли у тебя TPM выполни в командной строке manage-bde -status и читай ответ
    А вообще гугли инструкцию к своему устройству, вот пример dell, сегодня много устройств с аппаратной поддержкой шифрования

  2. Тебе даётся ключ, емнип, для восстановления данных. Я пока им ни разу не пользовался, но в диспетчер паролей записал )

Пример того, как просто начать шифровать диск

Кто и как может получить физический доступ к твоему диску:

  1. Уже упоминал потеря или кража ноутбука

  2. Ты большой босс и представляешь интерес для конкурентов. Ноутбук в поездки берёшь и оставляешь на время ужина в отеле, пусть и в сейфе, пусть и Mac Book, винты доставаемы в любом случае, скопируют всё содержимое и не заметишь. Как заметить лаком с блёстками пломбы нарисуй на винтиках и швах корпуса )

  3. Часто можно обойтись и без вскрытия используя Live CD (флешка, конечно). Скорость копирования не будет высокой, но может тут цель была подсунуть чего-нибудь в автозагрузку или спереть файлы cookies/ovpn/password.txt/*.config Корпоративный шпионаж инсайдером/уборщицей также никто не отменял, т.е. опасной территорией считай даже свой офис.

    На практике можно под твоей учёткой войти примерно так: под Live CD заменяешь exe-файл экранной лупы консолью, ребутаешься, грузишь консоль (загрузится она из под системной учётки) и делаешь что хочешь с локальными учётками. Можно и проще, конечно, там же (из под Live CD) изменить пароль твоей учётной записи

  4. Ты умер и твой ноутбук решили толкнуть с авито без зачистки

  5. Ноутбук оставлен без присмотра разблокированным (пусть даже в офисе) выработай привычку блокировать сессию, если отходишь от компа, или хотя бы включи автоблокировку через 2-5 минут

Пример просмотра файлов Windows из под Linux

Случай из жизни
Когда только появилась Windows Vista я запустил виртуалку (сидел тогда на SuSE) и поставил висту с принесённого диска. Не знаю, чего я ожидал, но мне было предложено ввести ключ активации. Ниже где-то была ссылка на чтение лицензионного соглашения, которая открывалась в IE, в котором можно было жмякнуть CTRL+O, в фильтрах прописать * и добравшись до explorer.exe запустить его из под системы. Окно с лицензией достаточно было убрать в сторону. Это было необычно, позднее мне показали подобный, но сильно сложнее, путь в Windows 98

Демка

Этим я бы хотел показать, что в некоторых случаях шифрования может быть недостаточно и следует какой-то простой (для вас) пароль установить на BIOS устройства )

Твой телефон тоже большая флешка

Тут действовать тоже просто:

  1. Включаешь шифрование всего телефона

  2. При каждом ребуте (или каждые 3 дня) придётся вводить разок большой (тобой придуманный) пароль для расшифровки

  3. Обязательно необходимо настроить блокировку экрана

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

О чём ты будешь переживать больше всего, если потеряешь телефон?

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

Случай из жизни
Буквально на днях: сажусь в такси и нахожу чужой телефон, который пускает в систему без пароля (графического или пина). Можно предположить, что забывший пользуется такси и есть банковская карта, а в телефоне есть мобильный банк, соцсети и симкарта для получения смс от банка. Кстати говоря, такси сегодня и доставкой еды занимается. Какой код доступа в мобильный банк? ДР из соц. сетей проверить можно или автозаполнение паролей в браузере + смс код на тот же телефон для восстановления доступов?. Это устройство сегодня не просто телефон и флешка, но и ключ доступа к вашим деньгам и личной жизни и потерять его проще, чем ноутбук!

Облака

Сюрприз! Облака тоже большая флешка, только ты её потрогать не можешь ))

Всё, что ты положил в облака в открытом (незашифрованном) виде спокойно скачает и прочтёт тот, кто получит доступ к твоему облаку. Допустим к гугл-диску.

Часто читаешь, какие права запрашивает сайт, когда жмякаешь кнопку входа/реги на сайте через гугл? А если там полный доступ на чтение гугл-диска, напряжёшься, тем что твои фоточки в открытом виде валяются для стороннего сайта? Ведь на той стороне есть плохие парни, которые могут поиметь доступ к базам и захотеть заработать по-быстрому на ваших доступах

Случай из жизни
Это было на какой-то шумной конференции, как правило на них разработчики слушают интересные доклады, а в перерывах охотятся на футболки от партнёров-организаторов )
Футболки дают не просто так, а за верные решения задач, не редко в интерактивном режиме (т.е. через чат-бот или на их сайте). В одном из таких конкурсов мне не удалось поучаствовать, т.к. регистрация через GitHub/Google запрашивала слишком много прав, словно разработчики поленились указать, что им нужны лишь имя и почта. Они сделали просто запросили полный доступ ко всему. Как будет использоваться доступ к приватным репам или гугл-диску мне не ответили

Используй двухфакторную аутентификацию (2FA)

Для тех, кто не вступил в секту свидетелей драматического отличия авторизации от аутентификации и их обоих от идентификации: читай аутентификацию, как вход на сайт )

Кратко:

  1. Есть у тебя гугл-почта и кто-то узнал твои логин/пароль

  2. Пробует войти под твоей учёткой

  3. Он должен нарваться на второй подтверждающий фактор (например одноразовый код из SMS или Google Authenticator)

Настрой двухфакторку:

  1. Google https://myaccount.google.com/signinoptions/two-step-verification

  2. GitHub https://github.com/settings/security

  3. GitLab https://gitlab.com/profile/account

  4. Прочие: почты, facebook, vk, firefox, twitter, банки же по умолчанию предлагают 2FA не смей отключать )

Случай из жизни
Я периодически проверяю на предмет базовых уязвимостей тех, с кем мы интегрируемся. Бывало попадал в чужие почтовые ящики, а этого бы не случалось, если бы парни использовали простую двухфакторку. Просто включи её, но обязательно почитай что делать, если твой второй фактор недоступен, ведь ты можешь потерять телефон)

Менеджеры паролей

Используешь один и тот же пароль везде?
Поздравляю, наверняка твой любимый пароль уже не сложно найти в сети по твоей же почте, а проверить утекал ли он можно на сайте https://haveibeenpwned.com/

Лучше, конечно, подписаться на подобные утечки, например тут https://monitor.firefox.com/ , знаю, что какие-то менеджеры паролей также уведомляют об утечках.
Утечки случаются часто, подпишись на https://t.me/dataleak или зарегайся на соответствующих форумах, чтобы видеть, как часто это происходит.

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

Но как запомнить все пароли? Мы уже давно не живём в мире, когда необходимо всё всё именно запоминать и люди с древних времён используют письменность, также с древних времён используется шифрование, но записывать пароли на бумажках недостаточно, а шифр Цезаря не является надёжным.

Необходимо поставить менеджер паролей и вести записи там https://www.techradar.com/best/password-manager

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

Есть вариант аналогового менеджера паролей https://qwertycards.com/, только это менее удобно. Зато безотказно, пока карточку не потеряешь, но её можно забэкапить в облака ;)
Когда-то давно сделал по фану поделку на коленке https://sansys.github.io/cryptocard/

Пример оригинальной карточки

Также можно пользоваться и автозаполнением браузера, но оно покрывает лишь веб сайты, не позволяя дополнять пароли файлами и кодами восстановления. Однако, если это твой путь, то мастер-пароль всё равно нужен, ты ведь не хочешь, чтобы кто-то получив доступ к браузеру набрал about:logins в адресной строке и увидел все твои доступы? Мастер-пароль для автозаполнения вводится, как правило, лишь раз, после запуска браузера и стащившему ноутбук будет доступно автозаполнение. Потому отдельный менеджер паролей предпочтительней, либо сочетай их.
Пример настройки https://support.mozilla.org/ru/kb/ispolzovanie-master-parolya-dlya-zashity-sohranyon

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

Антивирусы

Народ из ИТ их недооценивает и порой проявляет искреннюю нелюбовь, однако обновляются антивири ежедневно, и если где-то вчера было обнаружено подобие вируса WannaCry, то уже сегодня ты будешь в большей безопасности с антивирусом, чем без него.

Все они работают с сигнатурами, по которым типичные вирусы находятся довольно быстро, так что подбирай и сравнивай https://www.techradar.com/best/best-antivirus
Если поставленное решение заставляет тупить комп (не считаем первый запуск с начальным сканом), то альтернатив на рынке сегодня множество!

Случай из жизни
Попросили посмотреть компьютер, т.к. там вирус файлы удалил и что-то непонятное пишет
Глянул файлы зашифрованы, но есть, вирус и правда вирус! и просит денег. Через несколько дней уже со всех новостей слушал про новый вирус-вымогатель, жаль скрин не сделал, чтобы опознать его. Однако красота такая: в уголочке отключенный известный антивирь. Почему отключен? Просил то ли БД обновлять, то ли лицензию, достал, в общем его отключили зато теперь вирус просит свою долю ?

Если верно помню, то в случае с WannaCry достаточно было устанавливать обновления на систему, т.к. Microsoft выпустила заплатку дыры за месяц или два, до её эксплуатации вирусами-шифровальщиками. Обновления системы часто исправляют уязвимые места, стоит об этом помнить

Секретная переписка

Получал на почту пароли, документы, сертификаты, токены или что иное конфиденциальное? И это лежит там же на почте, все ещё? т.е. если кто-то получает доступ к твоей учётке он всё это может найти и прочесть старые письма с доступами?

Уже давно есть PGP, который совсем недавно начал без сторонних приложений поддерживаться в почтовом клиенте thunderbird.net

Как это работает ты со всеми делишься публичным ключом, который почтовые клиенты находят по email, письмо шифруется, а ты приватным ключиком расшифровываешь.
Это сегодня не сложно.

Забавный факт, см. на даты
http://personeltest.ru/aways/bugzilla.mozilla.org/show_bug.cgi?id=22687https://bugzilla.mozilla.org/show_bug.cgi?id=22687

Если хочешь шифрование, но противник подобных клиентов, то в помощь приходит mailvelope.com

Также обрати внимание на почту protonmail.com они принципиально на своих серверах не хранят письма в открытом виде. Исключительно в зашифрованном, даже с автоудалением (можно задать время жизни письма).
Изъяв сервер никому не удастся прочесть переписку, хотя стоит помнить про метаинформацию: когда, кому, с какой темой письмо было написано это всегда есть.

Не так давно gmail запустил конфиденциальный режим для отправляемых писем, включать его необходимо вручную, а Facebook поддерживает шифрование любых уведомлений

Настройка PGP в Facebook
http://personeltest.ru/aways/www.facebook.com/settings?tab=securityhttps://www.facebook.com/settings?tab=security

Скрывай почту

У тебя в почте есть спам? Если да лишь потому что ты почту юзал на каких-то левых ресурсах (а может и нужных тебе), которые слили почты спаммерам. Конечно остаётся вариант ты указал почту публично в каком-нибудь профиле гитхаба/вконтактика

Для временной регистрации на ресурсах используй fakemail.net или ему подобные (гугли temp/fake email) и уж точно не используй корпоративную почту )

Даже на нужных тебе сайтах лучше почту не светить, в этом могут помочь различные email-relay, например relay.firefox.com, Apple ID

Как это работает тебе выдаётся несколько почтовых адресов, поступающие письма на которые пересылаются на настоящий адрес. В идеале под каждый ресурс (или группу ресурсов) иметь отдельный подобный ящик, чтобы ты знал ага! Сайт 2 слил мою почту, в этом случае легко сменить адрес на ресурсе, прописать новый прокси-адрес и всё, спама нет, и угрозы возможной утечки тоже.

Случай из жизни
Казалось бы кому нужна твоя почта? А конкурентам она нужна!
Был у меня случай написали коллеги, мол смотри, у нас украли лендинг (маркетинговый сайт скопировали) и немного ребрендили под себя плохие парни. С одной стороны нам всё равно, т.к. это не сам же продукт, с другой именно их продукт был искренне интересен мне. За 5 минут использования нашёлся XSS и всякого по мелочи. Нашёл я и метод API (на PHP), который принимал штук 20-30 параметров. Натравил на него sqlmap, прошло несколько часов...
Найдено подозрение на SQL-инъекцию с выдачей результата моего запроса из их БД на странице с ошибкой 500. Дальше всё просто 5 минут кода и много тыс. email-ов у меня в логах. Конечно это была лишь демонстрация и данные дальше меня не утекли, но ввиду слабого хеширования паролей и всех прочих колонок в табличке users можно было бы отправить достоверный спам (или рекламную кампанию), а человек бы и не понял источник утечки его данных, если одну почту использует везде.

Указывай фейковые данные

Подумай о том, сколько информации о тебе есть в интернете: гитхаб, вконтакт, линкедин и пр. Теперь вопрос а зачем ты указывал именно настоящие свои данные?
Ок, допустим публичная личность ничего страшного, т.к. твоё имя твой бренд, однако, если сайт (допустим банк) настаивает на наличии ответа на секретный вопрос для восстановления доступа, в случае утери, то зачем давать настоящие ответы?

Зачем честно писать имя первого котика или девичью фамилию мастери? Ведь всю эту информацию наверняка можно узнать из социальных сетей.

Придумай ответы наобум, в идеале их запомнить, но можно также воспользоваться менеджером паролей, приложив файлик с зашифрованным архивчиком). Хотя есть вариант проще представь, что ты это герой сериала и давай ответы, связанные с ним, остаётся в голове лишь держать имя сего персонажа (например Чендлер Бинг), но никому про него не говорить, конечно же.

В случае, если парикмахерская или бургерная требуют твои паспортные данные, типа ФИО, дата рождения (хуже серия/номер паспорта, номер телефона и почта), лучше, конечно, забить на это место, либо сообщить неверные данные (и да потерять возможные скидки в неделю дня рождения, но всегда можно указать дату на неделю раньше)

Ладно, персональные данные, допустим, ты выдумываешь, но куча сервисов просит вводить банковскую карту, а ты не хочешь, чтобы они списывали с тебя деньги сверх меры, тут рецепт тот же не указывай свою основную банковскую карту, выпусти виртуальную, установи лимит в 300р. (допустим стоимость подписки) и используй её. Если твой банк не может моментально выпускать такие карты меняй банк.

Случай из жизни
Сгонял недавно я впервые в жизни в отпуск в турцию, а по возвращении некто пытался списать с меня $N (емнип снять нал), причина поработали кардеры. Конечно, это случай из оффлайна, но я был рад тому, что лимит на ней был 10к, даже если бы смогли что-то списать, то не больше установленной суммы. Да и в целом если не хочешь, чтобы без твоего ведома ресурс мог списывать деньги повторно, то можно выпустить карту, оплатить, да заблокировать.

А есть история печальнее: Как, зная только имя и email человека, злоумышленники получили доступ ко всем его аккаунтам и удаленно уничтожили информацию на всех его устройствах

Потому размещая пост на сайте объявлений лучше представляться как Афанасий Петрович, это поможет вам сказать честное и откровенное нет в случае звонка службы безопасности банка

Вводи пароли так, чтобы никто не видел

Если используешь менеджер паролей наверняка ты не вводишь пароли, разве что в менеджер паролей )

Сегодня мощной оптикой никого не удивить и если ты сидишь у окна, или в кафешке под камерой, и одновременно являешься чьей-то целью, то узнать твой пароль не будет сложно ;)

Соответственно думай о том где ты находишься прежде, чем войти в систему

В идеале, конечно, использовать отпечаток пальца, после стерев явный след, но даже тут не всё так просто)

Случай из жизни
Французский телеканал был взломан после интервью сотрудника на фоне стикеров с паролями

Wi-Fi

Возможно это уже из области фантастики, для некоторых, тем не менее никогда не используй публичный Wi-Fi, потому что возможен следующий сценарий:

  1. Ты ищешь сеть <имя кафешки + free> и подключаешься

  2. Вводишь адрес банка + логин/пароль, получаешь смс

  3. это публичная сеть, она может быть медленной, рассуждаешь ты, и смотришь на крутилку

  4. форма отмирает и показывает сообщение таймаут, войдите ещё раз

  5. быстро показывается новое поле для повторного ввода смс-кода на вход

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

  7. с твоего счёта пропали деньги

Пример надуманный, т.к. сегодня каждый браузер предупредит, что нет доверия к сертификату, да и мобильный банкинг уже популярен/удобен настолько, что с ноутбука на сайт банка входить не хочется, а мобильные приложения явно проверяют сертификат. Также не удастся заюзать банк по HTTP (небезопасный протокол обмена данными), если он был хоть раз открыт по HTTPS, этим рулит политика HSTS (надеюсь все банки заботятся о клиентах и указывают это в своих заголовках)

Однако улови самую суть подключившись к публичной сети, кто будет ресолвить DNS в IP? Если ты вручную не прописывал у себя DNS-сервер, то это будет тот, кто раздаёт Wi-Fi. А человек на той стороне направит тебя на фишинговый сайтик. Хотя, если описанный выше MitM реализован, то наверное, за DNS можно и не переживать уже, т.к. весь твой трафик доступен злоумышленнику )

Это я всё к чему Wi-Fi не идеален и дополнительные меры по защите трафика необходимы, а именно:

  1. Используй VPN для защиты от человека посередине, чтобы твоя банковская тайна по-прежнему оставалась тайной. Примеры сервисов: protonvpn.com или WARP (последний без смс/регистраций)

  2. Также в последнее время набирает популярность DoH, хотя бы скроет от лишних глаз инфу с хендшейка о том, куда ты ходишь, чтобы подготовиться к твоей атаке)

  3. Пропиши в качестве DNS-сервера кого-нибудь популярного, например 1.1.1.1 (хотя и тут не всё идеально, емнип из-за DHCP)

  4. Или не очень популярного nextdns.io, как следствие останешься без некоторой рекламы и мышкой будешь управлять списками разрешений.

  5. Обязательно настрой VPN Kill Switch (в терминах протон-впн) отключает интернет, если нет VPN-соединения, полезно, когда тебе пытаются специально помешать использовать VPN

  6. Отруби в телефоне/ноутбуке автоподключение к сетям, чтобы кто-то не выключил в подъезде твои вай-фай/электричество, да ещё может проявить артистичность и назвать свою точку доступа именем твоей точки без пароля)

А замечал, как называются Wi-Fi сети соседей? Наверняка что-то вроде provider-kvartira-123? А у тебя? Зачем вообще имя сети палишь? Вот для входа в почту ты вводишь логин/пароль + код из Google Authenticator, а для подключения к вай-фаю тебе достаточно выбрать удобный логин + ввести пароль, верно?

Выглядит странно, лучше скрой SID своей сети и вводи его по-честному, отключая вещание сида в настройках роутера, и, кстати, - назовись принтером, типа HP-Laser Jet 5

Раз упомянул про роутер ты же сменил дефолтный пароль к панели управления? Можно ещё заморочиться и настроить автоотключение на ночь и разрешить доступ к панели управления с конкретного mac-адреса, хотя мак сменить не сложно + какой-нибудь airodump-ng позволит его подсмотреть, но в любом случае ты можешь ощутимо усложнить жизнь плохим парням, как минимум новичкам.

А если думаешь, что ближайшие соседи от тебя отделены большим участком да забором, так, что до них Wi-Fi не достучится, то будешь удивлён на крышу твоего дома может сесть квадрокоптер в ночи, со всем необходимым на борту )

И раз упомянул про дефолтный пароль на роутере у тебя есть умные устройства с выходом в сеть? Пароли то небось заводские установлены? А то всякое бывает

Случай из жизни
Дело было совсем давно, в гостях однокурсника выяснилось, что в подъезде стоит хаб. В следующий раз пришёл я с приложением, емнип, ICQ Sniffer замечательная вещь, просто запускай и смотри HTTP-трафик, тогда многие ведущие компании не заморачивались на SSL, как следствие логины/пароли и переписка были видны прямо в сниффере. Сейчас такое представить сложно по разным причинам, но VPN лучше включать )

Phishing

Все уже понимают, что если приходит письмо о неожиданном наследстве от африканского принца это спам, потому фишеры действуют сегодня крайне хитроумно, например:

  1. Тебе приходит письмо от гугл-календаря или от blogger.com со ссылкой на мошеннический сайт

  2. Или (сюрпрайз-сюрпрайз) получаешь письмо от популярного агенства по найму кадров с хорошим телом письма, соблазнительной зарплатой/страховкой/печеньками для всей семьи, но детали в PDF/Word-файле, которые ты, конечно, откроешь и получишь вирус.

    Почему? Потому что рекрутер агенства тупо переслал файлик оригинальной вакансии, полученной от плохого парня. Может рекрутер даже открывал и тоже заразился каким-нибудь шифровальщиком, но чтобы успел распространить заразу дальше зараза проявляет себя через недельку или по команде. MS Office вовсе можно заменить на LibreOffice и им же можешь открывать PDF-файлы, что усложнит жизнь подобным видам атак.

    Фишинг проявляет артистичность и в теме письма указывают: Задолженность по налогам, Ваш депозит закрыт, идите в отделение банка и т.п., т.е. цель поставить тебя в тревожно-бездумное положение и заставить жмякнуть по ссылке, чтобы ты скачал и открыл документ. Ок, если это происходит у тебя дома страдаешь только ты. А если тебе на рабочую почту придёт письмо Ваша зарплата будет урезана в связи с актом 5 о правонарушениях на предприятии и к письму приложен файлик, будешь его сразу открывать? Уверен, многие даже не проверят отправителя

  3. Регистрируют доменные имена очень похожие на те, что тебе знакомы, но они лишь похожи, ты вводишь данные для оплаты или логин/пароль и всё.
    см. примеры разводов http://personeltest.ru/aways/habr.com/ru/company/solarsecurity/blog/502576/
    кстати, в том же nextdns есть удобная настройка не ресолвить домены младше 30 дней, как раз с целью избежать подобных фишинговых доменчиков

  4. Если твой хороший коллега/друг/иной контакт прислал странное письмо или просит необычное что-то не поленись и позвони ему, возможно это вовсе не он!
    Например его почту взломали и теперь он всем пишет. Либо так: вашим доменом является site.ru, а пишут тебе с адреса boss.name@site.su похожие адреса, не каждый заметит подлога )

  5. Бывают и вполне корректные ссылки, случай: приходит письмо от банка, которое пытается познакомить читателя с безопасностью, кратко в письме, подробно по ссылке. Однако обнаруживается, что ссылка вида bank.ru?redirectTo=/page10.

    Если параметр redirectTo не проверяется банком совсем никак, то можно прописать туда любой другой адрес. Это называется уязвимостью Open Redirect, что открывает простор для фишинга. Особенно, если у банка удаётся угнать поддомен третьего уровня, натравленный на какую-нибудь тильду (это случай из реальной жизни). Что это значит для тебя ссылка может вести на твой любимый банк, ты это 10 раз проверил и поверил, однако твой банк тебя отправил на фишинговую страничку

  6. Ты пишешь статьи на хабре/медиуме/где-то ещё? А поступали ли тебе предложения вида Ой, вы так классно пишите! А у нас есть продукт, мы предоставим бесплатную версию, не могли бы про нас, если вам понравится, конечно, написать статейку? За деньги!.

    Тебе хочется получить N денег начинаешь переписку, соглашаешься, получаешь setup.exe весом в 550 Мб, запускаешь всё, кто-то уже у тебя в сети новый появляется или документы сливаются. В теории могли даже настоящий setup подсунуть какого-то продукта, главная ошибка ты запустил файл на своём основном хосте, не в виртуалке. Обладатели windows имеют из коробки песочницу для подобных вещей, но всегда можно организовать и свою через Virtual Box.

  7. Подходишь к офису или к своей квартире и находишь красивую флешку на 100 гигов, что будешь делать? Правильный ответ не трогать её или выкинуть нафиг, чтобы кто-то ещё не подобрал. Ведь это отличный способ: выкинуть несколько флешек с вредоносными скриптами на входах в офис (или в самом офисе оставить на полочке, если смог пройти случайно) кто-то любопытный прямо в офисе проверит флешку и здравствуй новый крипто-год )

Что делать? Тут только осторожность и внимательность тебя спасут.

Вот скажи, что бы ты делал, если бы получил такое письмо?

Освой виртуалки или хотя бы https://www.virustotal.com туда можно загрузить файлы для проверки на различного рода опасности

Случай из жизни
При проверке сотрудников GitLab каждый пятый попался на фишинговое письмо

Безопасный сёрфинг

А вот эта часть уже больше может доставить неудобств, чем всё описанное выше, однако кто-то что-то для себя если найдёт, то уже хорошо, поехали

Старайся использовать разные браузерные профили для почты/сёрфинга/финансовых сервисов/соц.сетей, чтобы не было такого тебе показывается письмо или страничка с уязвимостью и ты теряешь свои деньги или сессию.
Если использовать разные профили, или даже браузеры, то вероятность сего дела уменьшается. Например тебе приходит ссылка на почту на поддомен твоей любимой социальной сети 2019.mynet.ru. Предположим соцсеть позволяет из поддоменов *.mynet.ru обращаться в основной домен тогда тот, кто завладеет 2019.mynet.ru сможет отправить от тебя сообщение твоим друзьям. Пример далёк от идеала, но если для почты и социалки использовать разные профили то пример точно нереализуем.
Как этого достичь, не меняя привычек: профили Chrome или самое удобное решение - контейнеры Firefox изолированные профили в рамках одного браузера. К тому же подобное разделение сессий не позволит рекламным агентствам связать вашу деятельность на разных сайтах, т.е. в FB ты не увидишь рекламу того, что искал в интернет-магазине.

Фишинг сегодня умён и может учитывать твои персональные особенности (браузер/ОС/язык) и дорисовывать интерфейс так, чтобы ты был максимально убеждён в корректной работе сайта. Потому притворяться другим браузером тебе же на руку, т.к. ты явно можешь увидеть что-то ненормальное и опознать подлог, расширение в помощь https://mybrowseraddon.com/useragent-switcher.html.

Просто забавная картинка

Говоря о расширениях можно упомянуть uBlock - делает жизнь твоих страничек лучше, т.к. залочит все явно ненужные скрипты https://github.com/gorhill/uBlock

В последнее время (пару месяцев) использую дополнительно иное популярное расширение NoScript для блокировки всех js-скриптов. Расширение содержит предзаполненный вайтлист того, что явно не нужно лочить, но если сайт не ведёт себя корректно без JS, то можно вручную выбирать, что игнорить, также можно отключить блокировку временно. Удобная штука, т.к. какой-нибудь XSS или обращение с угнанного поддомена на домен таким образом не отработает точно, т.к. ты не разрешал ему работать

Кстати, покупал когда-нибудь онлайн чайник или холодильник? А потом их реклама как долго тебе показывалась? Лично меня напрягает ситуация, когда я гуглю таблетки от паранойи, а они начинают меня преследовать.
Возможно не однозначный выход, но большинство рекламных кампаний полагаются на идентификацию по cookies, и вот тут помогает расширение Cookie AutoDelete, которое сносит кукисы с закрытых вкладок. Теперь я не забываю нажать кнопку Выход на сайтах и не переживаю, что мои вчерашние сессии сопрёт сегодня скаченный вирус. Да, есть неудобство повторно вводить логины/пароли, но автозаполнение помогает ;)

Кукисы не единственный способ твоей идентификации: набор шрифтов, отрисовка канвы, поддерживаемые кодеки и пр. помогает составить твой уникальный отпечаток в сети. Расширение CanvasBlocker блокирует подобные возможности. Это расширение, как и те, что выше, может нарушить работу некоторых сайтов, но всегда есть возможность добавить сайт в исключение.

Сегодня браузеры помогают помнить за нас всё, т.е. многие вещи можно даже не гуглить и не добавлять в закладки, достаточно написать habr mitm и увидеть в подсказке страницу, что ты когда-то посещал

Откуда она берётся из истории посещений. Также и злоумышленник может воспользоваться твоей историей, чтобы понять, в какие корпоративные ресурсы ты ходишь. Настрой автоочистку истории браузера или воспользуйся соответствующим расширением, если хочешь оставлять последние N дней, например, см. History Cleaner

В тему рекламы и истории пользуешься гугл-поиском под личным аккаунтом?
История твоего браузера не имеет значения, всё есть в твоём профиле в гугле, если ты явно не запретишь вести подобные записи. Уверен в иных поисковиках также. Есть замечательный проект startpage.com тот же гугл, но без идентификации, кук и твоих запросов в адресной строке (истории браузера), также есть анонимный режим, который полностью скрывает тебя от посещаемого сайта из результата поиска)

Знаю, что наши хотят запретить некоторые методы шифрования в интернете, и ведь не просто так! Твой трафик может быть ценным ресурсом и плохо, если он окажется в плохих руках. Потому есть расширение HTTPS EveryWhere либо автоматически переключит открываемый URL на схему HTTPS, либо покажет большую красную плашку о том, что использовать HTTP не есть безопасно.

Ок, допустим ты открыл 100 вкладок, но явно же не все они тебе нужны? А вдруг какая-то вкладка майнит чего, или просто висит и сессию держит пинг-понгами (сжирая память/проц), кто-то к тебе подходит, хватает ноут и убегает (между прочим это надёжный способ получить разблокированный ноутбук/телефон). Будешь переживаешь, что сотка вкладок открыта и где-то там есть сессия, которая прошла двухфакторку? Используй Auto Tab Discard и не беспокойся старые неиспользуемые вкладки погибнут сами, а если Cookie AutoDelete ещё скажешь работать с такими вкладками, то и кукисы потеряешь. Хотя для случая кражи лучше, конечно, иметь кнопочку Стереть устройство.

Заключение

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

Шифрование дисков, VPN, расширения браузера, конфиденциальность почты, защищённые бэкапы в облака и т.п. может показаться для кого-то чрезмерными неудобствами уровня параноик. Но подумай сам! Ведь мы тоже самое уже делаем годами в обычной жизни: влажные уборки/стирки, мытьё рук, чистка зубов, приём душа, термообработка пищи, фильтрация воды, антисептики и маски это всё разве удобно? По большей части это исключительно меры предосторожности и в большинстве случаев не стоит переживать, но всё равно мы кипятим воду и моем фрукты перед употреблением, т.к. предупреждён = вооружён.

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

Есть глупый смелый рецепт: сделай нюдсофотку, положи в корень диска, домашнюю директорию, в почту, в облако, в телефон и думай о её защите )

Возможно после этого ты будешь таким:

Подробнее..

Из песочницы Сквозь тернии к звездам делаем устройство для наведения лазерной указки на любой небесный объект

13.06.2020 14:36:10 | Автор: admin
Привет, Хабр!

Решил показать свою небольшую самоделку, которая работает примерно так:



Если КДПВ сделала свое дело тогда добро пожаловать под кат :)

Небольшой спойлер
Я старался писать так, чтобы было максимально понятно всем

Аппаратная часть


Итак, для создания минимально работающего прототипа нам понадобятся:

  1. Кусок доски или чего угодно, на чем можно закрепить все компоненты
  2. Почти любой микроконтроллер. Я взял ардуино уно как самый простой вариант
  3. GPS модуль (с него мы берем дату, время и координаты). Теоретически можно вместо него взять модуль часов реального времени, но тогда ваши координаты вам придется вводить вручную и из коробки устройство не заработает, но зато время холодного старта сильно сократится
  4. Два сервопривода, или еще лучше два шаговых двигателя
  5. Лазерная указка
  6. Разная мелочь: паяльник, термоклей, макетная плата, провода, кнопка, конденсатор, ну и прямые руки.

По сборке особых хитростей нет: просто закрепить все компоненты на основании термоклеем.
Только надо постараться чтобы оси сервоприводов и лазера были максимально перпендикулярны друг другу, это уменьшит погрешность наведения.

Подключение


Тут тоже ничего сложного:

  • GPS подключается по uart (понадобится только Rx, так как нам ничего не нужно отправлять на модуль
  • сервоприводы в пины 10 (ось азимута) и 11 (ось высоты)
  • кнопка во 2 пин
  • питание на все модули
  • опционально конденсатор по питанию

Фотографии моей реализации(19Мб)






Программная часть


Переходим к самому интересному.

Весь код можно условно разделить на три части:

  1. Работа с GPS, кнопкой и сервами
  2. Работа с астрономией
  3. Главный цикл программы

Заметки по коду:

Для жпс использована библиотека tinygps++
Для кнопки GyverButton
Когда жпс понимает где он, на ардуине загорается светодиод на 13м пине
Для примера в коде есть массив с координатами разных ярких звёзд

Исходный код
#include <math.h>#include <ServoSmooth.h>#include <GyverButton.h>#include "TinyGPS++.h"TinyGPSPlus gps;ServoSmooth yaw;ServoSmooth pitch;GButton but(2);int yr = 0, mo = 0, d = 0, h = 0, m = 0, s = 0;float phi = 0, lambda = 0;float az = 0, height = 0;int counter = 0;float alpha = 0.0, delta = 0.0;float sunalpha = 0, sundelta = 0;float Coordinates[10][2] ={  {0, 0},  {sunalpha * 360 / 2 / PI, sundelta * 360 / 2 / PI}, //sun  {297.9458, 8.9233}, //altair  {279.4083, 38.8038}, //vega  {310.5333, 45.3538}, //deneb  {79.55, 46.0163},//capella  {89.0708, 7.4092}, //betelgeuse  {152.3625, 11.8672}, //regul  {51.4458, 49.9319} //mirfak};int Days(int d, int m, int y)//тут считаем, сколько дней прошло с момента весеннего равноденствия (21.03){  int days = 0;  int yearNotLeap[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };  int yearIsLeap[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };  if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))  {    for (int i = 0; i < m - 1; i++)    {      days += yearIsLeap[i];    }  }  else  {    for (int i = 0; i < m - 1; i++)    {      days += yearNotLeap[i];    }  }  if (m == 1) {    return d - 81;  }  else    return days + d - 81;}void GpsGetData(){  while (Serial.available() > 0)    gps.encode(Serial.read());  if (gps.location.isUpdated())  {    phi = gps.location.lat(); //Широта в градусах (double)    lambda = gps.location.lng(); // Долгота в градусах (double)    yr = gps.date.year(); // Год (2000+) (u16)    mo = gps.date.month(); // Месяц (1-12) (u8)    d = gps.date.day(); // День (1-31) (u8)    h = gps.time.hour(); // Час (0-23) (u8)    m = gps.time.minute(); // Минуты (0-59) (u8)    s = gps.time.second(); // Секунды (0-59) (u8)  }}void CalculateParams(){  float _time = (h + (float)m / 60 + (float)s / 3600) * 360.0 / 24.0;//вычисляем время в часах  float sunlambda = (float)Days(d, mo, yr) * 360 / 365; // вычисляем эклиптическую долготы солнца в градусах  sundelta = asin(0.398749 * sin(sunlambda * 2 * PI / 360));//вычисляем склонение солнца в радианах  sunalpha = asin(tan(sundelta) / 0.434812); // вычисляем прямое восхождение солнца в радианах  float tS = _time + lambda - 180 + sunalpha * 360 / (2 * PI) - alpha; //вычисляем часовой угол звезды в градусах  height = 360 / 2 / PI * asin(sin(phi * 2 * PI / 360) * sin(delta * 2 * PI / 360) + cos(phi * 2 * PI / 360) * cos(delta * 2 * PI / 360) * cos(tS * 2 * PI / 360));//вычисляем высоту  az = 360 / 2 / PI * asin(sin(tS * 2 * PI / 360) * cos(delta * 2 * PI / 360) / cos(height * 2 * PI / 360)); //вычисляем астрономический азимут (с юга по часовой)  if (tS > 90 || tS < -90)  {    az = 180 - az;  } // if (az > 180 && az < 270)  //  az = az - 360;}void setup() {  Serial.begin(9600);  yaw.attach(10, 90);  pitch.attach(11, 180);  yaw.setSpeed(20);  yaw.setAccel(0.1);  pitch.setSpeed(20);  pitch.setAccel(0.1);  yaw.setAutoDetach(false);  pitch.setAutoDetach(false);  pinMode(LED_BUILTIN, OUTPUT);}void loop() {  but.tick();  yaw.tick();  pitch.tick();  if (but.isSingle())  {    counter += 1;    if (counter == 9)      counter = 0;  }  alpha = Coordinates[counter][0];  delta = Coordinates[counter][1];  GpsGetData();  CalculateParams();  digitalWrite(LED_BUILTIN, gps.location.isValid());  if (az > 90 && az < 180)  {    yaw.setTargetDeg(270 - az);    pitch.setTargetDeg(height);  }  if (az < -90 && az > -180)  {    yaw.setTargetDeg(-90 - az);    pitch.setTargetDeg(height);  }  if (az < 90 && az > -90)  {    yaw.setTargetDeg(90.0 - az);    pitch.setTargetDeg(180 - height);  }}


Я не буду подробно разбирать каждую строчку, лишь остановлюсь на интересных моментах.

Урок астрономии


Про астротермины и еще кое-что
Если вы не знаете значение какого-либо термина, его можно узнать в википедии или спросить в комментариях буду рад ответить.

Также, я не нашел в интернете алгоритма перевода координат из одной системы в другую.

а момент здесь один функция CalculateParams()
Что должна делать такая функция: принять на вход координаты звезды в экваториальной системе (прямое восхождение и склонение), время и координаты наблюдателя и выдать высоту и азимут объекта, т.е. по сути перевести координаты звезды из экваториальной системы (в которой звезды неподвижны) в горизонтальную (в которой звезды перемещаются в течение суток).

Реализовано это, используя формулы сферической тригонометрии, а также сферической астрономии в вакууме.

Алгоритм таков:

  1. вычислить эклиптическую долготу солнца
  2. вычислить склонение солнца
  3. вычислить прямое восхождение солнца
  4. вычислить часовой угол звезды
  5. вычислить высоту и азимут

Вот как это реализовано:

void CalculateParams(){  float _time = (h + (float)m / 60 + (float)s / 3600) * 360.0 / 24.0;//вычисляем время в часах  float sunlambda = (float)Days(d, mo, yr) * 360 / 365; // вычисляем эклиптическую долготы солнца в градусах  sundelta = asin(0.398749 * sin(sunlambda * 2 * PI / 360));//вычисляем склонение солнца в радианах  sunalpha = asin(tan(sundelta) / 0.434812); // вычисляем прямое восхождение солнца в радианах  float tS = _time + lambda - 180 + sunalpha * 360 / (2 * PI) - alpha; //вычисляем часовой угол звезды в градусах  height = 360 / 2 / PI * asin(sin(phi * 2 * PI / 360) * sin(delta * 2 * PI / 360) + cos(phi * 2 * PI / 360) * cos(delta * 2 * PI / 360) * cos(tS * 2 * PI / 360));//вычисляем высоту  az = 360 / 2 / PI * asin(sin(tS * 2 * PI / 360) * cos(delta * 2 * PI / 360) / cos(height * 2 * PI / 360)); //вычисляем астрономический азимут (с юга по часовой)  if (tS > 90 || tS < -90)  {    az = 180 - az;  }}

Оценка погрешности


Оценим вклад каждого фактора в погрешность (отсортировано по вкладу в неточность)

  1. Кривизна рук у меня это самый главный фактор
  2. Неточное положение горизонта
  3. неточное положение нулевого азимута (напомню, что астрономы считают азимут с юга по часовой стрелке)
  4. Тот факт, что сервы не могут поворачиваться на дробный угол
  5. неточности в алгоритме перевода (положение солнца определяется не очень точно: например, эклиптическая долгота солнца считается гораздо сложнее (в коде упрощённый вариант); день весеннего равноденствия не всегда происходит в одно и тоже время;
    также, я не учитываю уравнение времени) но погрешность из-за этого натекает небольшая.

Что еще можно сделать (todo)


  1. Сменить сервы на шаговые двигатели с их микрошагами;
  2. Немного усовершенствовать алгоритм
  3. Есть метод полного устранения погрешности из-за кривого горизонта и азимута:
    существуют сервисы по решению астрофото: им загружаешь фотографию со звездами, а они вычисляют координаты центра кадра.

    Что мы делаем:

    1. прикрепляем к большому телескопу маленький телескопчик с камерой
    2. поворачиваем шаговики на 3 случайных точки на небе, делаем фотографии
    3. отправляем их на один из сервисов, используя его API и получаем координаты точек
    4. сложными программными методами избавляемся от погрешности установки основного телескопа
    5. PROFIT!!!

    На этом все, спасибо за внимание!

    С радостью отвечу на ваши вопросы в комментариях.
Подробнее..

Запускаем камеру от телефона, или что делать, когда ничего не получается?

02.07.2020 02:23:39 | Автор: admin


Лет восемь назад работал я в одном а в прочем, не важно где. Делали мы там всякие разные интересные вещи. В том числе занимались системами технического зрения для роботов. Роботы были немного маленькие. И если привод для них маленький сделать не было для нас особой проблемой, то вот сделать миниатюрную цифровую камеру, которая не была бы размером с половину робота, было трудно (когда же мы наконец похороним PAL в таких разработках и везде будет цифра?). Если вам любопытно узнать, чем же всё закончилось, прошу под кат!


Небольшой дисклеймер. С описываемых событий прошло уже достаточно лет, результаты работы не представляют никакого коммерческого интереса (ведь так, товарищ майор?), поскольку повторить полностью сейчас всё это невозможно из-за устаревания элементной базы, теперь можно рассказать, как молодой инженер искал решение проблемы и к чему всё это привело.

Изначально у нас был микропроцессор PXA300, в который втыкался SoC, от тогда еще Aptina, типа MT9D131 (JPEG сразу на параллельном выходе), но всё это потребляло много, а смысла в таком монстре было мало.
Проблема звучала просто робот привязан к компьютеру проводом на 100 мегабит. Оператор должен видеть цветную картинку хотя бы 640х480 в целых 15 FPS. Ставить в него камеру, которая гонит параллельный поток в XScale, в котором потом происходит тупое складывание картинки в буфер и передача кадра по сети, показалось слишком расточительным (ну серьезно, целый линукс на борту только чтобы перекладывать байты из одного интерфейса в другой?). Особенно учитывая целевое разрешение камеры. Нужно было решение проще. Плюс существенные ограничения по габаритам не позволяли поставить даже самый маленький объектив типа М12, он был просто конских размеров вместе с держателем.


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

реальный модуль,

кроватки на любой вкус.


Также удалось узнать, что есть такая штука как SMIA. Довольно быстро я нашел всю утекшую в сеть документацию на стандарт и стал его изучать. Оказалось, что есть три типоразмера модулей:


Name Length Width Height Option 1 Height Option 2
SMIA65 6.5 mm 6.5 mm 4.6 mm 5.8 mm
SMIA85 8.5 mm 8.5 mm 6.1 mm 7.1 mm
SMIA95 9.5 mm 9.5 mm 7.6 mm 8.6 mm

и по конструктиву нам подходит самый маленький SMIA65.
Поиск нормальных брендовых камер ни к чему адекватному не привел. Искать такую дичь у китайцев я еще не умел, а нормальные европейцы типа ST хоть и заявляли о том, что производят подобные модули (и даже документацию на которые можно было скачать без регистрации и смс), продавать свободно заинтересованной публике не желали. Обращение в наше представительство ST не помогло, и пришлось продолжать копать.


Слава ремонтникам мобильников! Схемы, платы, фотки! У них есть всё. После изучения документации и сопоставления доступных для покупки телефонов и запчастей выбор пал на камеру от Nokia 5250.
Сферическая нокия в вакууме.


Симбиан, все дела. Я даже качал торрентом какие-то дикие исходники этой чудесной операционки, в попытке найти готовый драйвер для камеры. Но, увы, тогда моих способностей на это не хватило. Опять пришлось копать глубже.


Ох, какой же наивный я был. Это сейчас, пройдя весь путь от и до, я понимаю, что можно было существенно сократить время разработки, заказывая нормальные платы на нормальном производстве (правда, с оплатой тогда потенциально были некоторые проблемы, а ручки чесались сделать здесь и сейчас). Когда там появился JLCPCB или PCBWay? А тогда только ЛУТ на фольге, хлорное железо и два дня на всё про всё.
Signal Integrity? Вы делали гигабитные дифпары на двустороннем миллиметровом текстолите из платана лутом? А я делал. Даже импеданс считал.

0.5\0.2.


Ничо, работало (к сожалению, доступа к осциллографу, которым можно было бы посмотреть глазок, у меня не было). Сделал несколько тестовых плат. Намучился с пайкой. Экспериментировал с паяльной маской, даже сделал несколько плат. Одну успешно запорол, пропаяв её при помощи флюса ТАГС (ха-ха, какая ирония. Сейчас на сайте чипдипа написано про остаточное сопротивление. Эх, эту бы надпись тогда). На той плате ничего нормально не работало, даже источники питания. Между дорожками, которые ну никак не могли быть связаны, всегда присутствовало от десятков до сотен килоом. Причем плату после пайки мыл в семи водах. Поначалу я думал, что что-то успешно спалил. Начал отпаивать источники питания и всякую обвязку. Замыкания не проходили. Кончилось всё тем, что отпаял с платы вообще всё. Замыкания остались. Сделал вывод, что дело во флюсе, который затёк под маску и не вымылся вообще ничем. После этого я перестал делать платы с маской сам и паять их с флюсом ТАГС.


Но камера это еще полбеды. Надо же было чем-то принимать последовательный сигнал и разворачивать его в параллельный, чтобы запихнуть в STM32F217 (BlackFin? Не, не слышали. К моменту описываемых событий я прочно состоял в секте стм-оводов и конфигурил клоки через только появившийся экселевский файлик (кубоводы, привет!)). Да-да, четырехсотых стм-ок тогда еще не было (хорошо, хорошо, они только появились), и я успешно использовал кит от стартеркита на двухсотой серии. Опять же в результате длительного поиска и изучения рынка оказалось, что пути ровно два. Либо брать лэттисовскую плисину, для которой был апноут по преобразованию CSI в PCAM (так и не нашел его из 2012 года у себя в архиве, но точно помню, что был такой), либо покупать STSMIA832 (забавно, ST выпилили свою доку на преобразователь с сайта. У них теперь можно только апноутом разжиться.) и учиться паять BGA. Поскольку пайка была мне ближе и знакомство с потрохами плисов не входило в планы, да и сроки откровенно поджимали, я обзавелся несколькими микросхемами и купил готовые переходники с TFBGA25 в DIP (и да, макет был собран на беспаечной макетке и даже как-то работал).
Собственно, схема десериализатора совершенно банальна (не переживайте, ГОСТом тут и не пахнет, с тех пор я научился рисовать схемы посимпатичнее).

Схема, да.


Видите красные площадки? Это площадки подключения переходника из TFBGA25 в DIP.

Плата.


Но вернемся к камере. Чем прекрасна SMIA? Да тем, что поначалу казалось, что всё просто.

Красота же?


Все регистры модулей описаны, как выбрать внутреннюю цепочку тактирования, со всеми необходимыми пре- и постскейлерами, тоже описано.

Такие подробности да в каждый документ бы!


Пока я занимался всем этим, SMIA_Functional_specification_1.0.pdf стал моей настольной брошюркой, зачитанной до дыр.
Но, чу, колченогое подобие драйвера (ах, какое громкое слово для заголовочного файла с несколькими функциями записи-чтения регистров камеры) написано, а в память микроконтроллера почему-то никакие байтики не падают. Хотя модуль через I2C успешно читается и записывается. О, сколько раз я думал, что неправильно сконфигурировал клоки или пропустил какую-то команду. Результата не было. Тогда я подумал, что хватит биться головой об стенку, надо делать что-то адекватное тому тупику, в который я угодил. Откуда я взял камеру? Правильно, из телефона. Телефон умеет показывать видео и делать фотографии с модуля? Умеет. Значит нужно тело на опыты. Драматичная нет история покупки донора для опытов лежит здесь.
Как бы там ни было, самым сложным было подпаяться к клоку и данным с модуля.

Ножки у кроватки под стенками, понимаешь.


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


Вы тоже заметили строки с вопросиками, которыми я пометил запись непонятно чего непонятно куда (пакеты 45-50)? Эти странные регистры, не описанные в, казалось, незыблемой документации (кто ж знал, что в Manufacturer Specific Registers [0x3000 0x3FFF] тоже надо что-то писать). Ну а дальше всё было очевидно. Пишем это непонятно что в непонятно куда и вуа-ля!


first_picture_ever.png


К сожалению не помню, есть ли тут дебайеризация (хм, J = demosaic(I,'grbg'); подсказывает, что есть) и если есть, то всё ли сделано правильно. Как и на втором кадре:

Камера лежала на боку.


Если повернуть голову набок, то можно прочитать 95% чего-то, рассмотреть рёбра какого-то радиатора, лежавшего на столе, и даже попытаться прочитать пароли на листочках с магнитной доски.
Почему всё такое зеленое? А пёс его знает. Этим вопросом уже занимался нормальный адекватный программист (Миша, привет!), который прикручивал эту систему к LwIP и проклинал меня за маленький объем SRAM и малую скорость 217-го (120МГц всего), который еле успевал перекладывать байты. По его словам, надо было просто правильно выставить усиление цветов каналов.


А дальше было дело техники. Нарисовать нормальную схему:

Ещё одна схема.


И сделать нормальную плату, которая показана на КДПВ.

Плата, да.


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


Времени было на всё угрохано больше года. Сейчас это кажется диким и ужасно непродуктивным. Наверняка, есть много людей, проделавших бы подобное за пару месяцев. Но я был один, в коллективе никто таким не занимался, интернеты упорно молчали, совета просить было не у кого. Но опыт есть опыт. Я ни сколько не жалею о потраченном времени. Полученные знания бесценны! Предполагаю, подобным образом можно раскурить многие другие модули, которые всё еще ставятся в телефоны, ведь, по сути, никакой особой магии в них нет. Знай себе записывай правильные байтики в правильные регистры да трассировку корректную делай.


А вы как думаете?

Подробнее..

Как найти количество всех букв на всех знаках вида въезд в город Х в стране? Точный способ ответить на такие вопросы

24.08.2020 18:21:28 | Автор: admin
Недавно в рамках одного собеседования мне понадобилось решить задачу, условие которой приведено ниже:
У лучшего в мире управляющего по имени Пенультимо родилась очередная гениальнейшая идея, peализовать которую вам и предстоит. Он верит, что поток туристов на Исла-де-Эдукадос повысится, если он сможет рассказать всему миру, как же много замечательных дорожных знаков с длинными надписями eсть у них на острове. Вам предлагается придумать алгоритм, позволяющий подсчитать суммарное количество букв на всех знаках Въезд в город Х на острове, а затем применить полученные знания для подсчёта аналогичной метрики для Республики Беларусь. Обратите внимание язык, используемый для обозначения населённых пунктов, а также тот факт, что въездов в город может быть несколько. Пенультимо также приветствует инициативность, так что можете исследовать этот вопрос для отдельных областей, провести сравнение с количеством людей, проживающих в области, а также провести любые другие исследования, которые покажутся Вам интересными.

Под катом покажу точное решение этой и других похожих задач, например: Сколько АЗС находится в пределах Москвы?

Общий метод решения


Если взглянуть на карту OpenStreetMap, то на ум сразу приходит следующая идея: а давайте для каждого города получим его границы и дороги, находящиеся внутри его границ, а потом найдем их пересечения, на которых будут стоять знаки! Как будем искать пересечения: берем отрезок границы, потом отрезок дороги и смотрим, пересекаются ли они (типичная геометрическая задача). И так пока не кончатся все отрезки и города.
Про архитектуру данных OSM
Вообще, есть три главных компонента: узлы, линии и отношения
Каждый элемент имеет свой ID, а также свои теги.
  • Узел это просто точка на карте, имеющая кроме ID также широту и долготу
  • Линия это отсортированный список узлов, который представляет контур здания или отдельную улицу
  • Отношение это список, состоящий из узлов, линий или других отношений, представляющий логические или географические связи между объектами на карте


OverPass


OverPass Это API для получения данных из OpenStreetMap. Оно имеет свой язык составления запросов, про него подробно можно почитать В этой статье.
Для того чтобы было проще и удобнее составлять запросы, есть инструмент Overpass-turbo, где результат выполнения запроса можно посмотреть в удобном и интерактивном виде.

Использование OverPass API в Python


Для обработки данных из OSM в Питоне можно использовать пакет Overpy в качестве оболочки.
Для отправки запросов и получения данных нужно проделать следующее:
import overpyapi = overpy.Overpass()Data = api.query("""*ваш запрос*""")

где в переменной(?) Data и содержится все, что выдал нам сервер.
Как обработать эти данные? Предположим, что мы ввели следующий запрос на получение границ Минска:
relation["type"="boundary"]["boundary"="administrative"]["name:be"="Мнск"];//Дословно: отношение вида административная граница города Минска>; out skel qt;

На выходе имеем файл XML (можно выбрать Json), имеющий следующую структуру:
<*шапка файла*><далее идет подобное перечисление всех узлов>  <node id="277218521" lat="53.8605688" lon="27.3946601"/>  <node id="4623647835" lat="53.8603938" lon="27.3966685"/>  <node id="4713906615" lat="53.8605343" lon="27.3998220"/>  <node id="4713906616" lat="53.8605398" lon="27.3966820"/>  <node id="4713906617" lat="53.8605986" lon="27.3947987"/>  <node id="277050633" lat="53.8463790" lon="27.4431241"/>  <node id="277050634" lat="53.8455797" lon="27.4452681"/>  <node id="4713906607" lat="53.8460017" lon="27.4439797"/><далее указаны пути и ID узлов, из которых они состоят><way id="572768148">    <nd ref="5502433452"/>    <nd ref="277218520"/>    <nd ref="4713906620"/>    <nd ref="277218521"/>    <nd ref="4713906617"/>    <nd ref="4623647835"/>    <nd ref="4713906616"/></way><way id="29079842">    <nd ref="277212682"/>    <nd ref="277051005"/>    <nd ref="4739822889"/>    <nd ref="4739822888"/>    <nd ref="4739845423"/>    <nd ref="4739845422"/>    <nd ref="4739845421"/></way>

Давайте получим некоторые данные:
import overpyapi = overpy.Overpass()Data = api.query("""relation["type"="boundary"]["boundary"="administrative"]["name:be"="Мнск"];>; out skel qt;""")Xa=Data.ways[0].nodes[0].lon #получаем долготу первого узла первой линииYa=Data.ways[0].nodes[0].lat #получаем широтуXb=Data.ways[0].nodes[1].lonYb=Data.ways[0].nodes[1].latNodeID=Data.ways[0]._node_ids[0] #получаем ID первого узла первой линииprint(len(Data.nodes)) #получаем общее количество узловprint(NodeID)print(Xa,Ya)print(Xb,Yb)

С точки зрения работы с OpenStreetMap в питоне, это всё, что понадобится, чтобы достать данные.

Перейдем непосредственно к задаче


Для ее решения написан код на Питоне, увидеть его можно под спойлером. Просьба сильно не ругать за качество кода, это первый такой большой проект на нем.
Заголовок спойлера
import overpy###########################def line_intersection(line1, line2): #функция поиска пересечений    ax1 = line1[0][0]    ay1 = line1[0][1]    ax2 = line1[1][0]    ay2 = line1[1][1]    bx1 = line2[0][0]    by1 = line2[0][1]    bx2 = line2[1][0]    by2 = line2[1][1]    v1 = (bx2 - bx1) * (ay1 - by1) - (by2 - by1) * (ax1 - bx1)    v2 = (bx2 - bx1) * (ay2 - by1) - (by2 - by1) * (ax2 - bx1)    v3 = (ax2 - ax1) * (by1 - ay1) - (ay2 - ay1) * (bx1 - ax1)    v4 = (ax2 - ax1) * (by2 - ay1) - (ay2 - ay1) * (bx2 - ax1)    return (v1 * v2 < 0) & (v3 * v4 < 0)#######################################citytmp = []city = []Borderway = []Roadway = []Total = 0A = [0, 0]B = [0, 0]C = [0, 0]D = [0, 0]amount = 0progressbar = 0 ReadyData = open('Готовые данные.txt','w')with open("Города Беларуси.txt", "r", encoding='utf8') as file:    for i in range(115):        citytmp.append(file.readline())citytmp = [line.rstrip() for line in citytmp]for i in range(115):    city.append('"' + citytmp[i] + '"')city[0]='"Дзсна"'api = overpy.Overpass()for number in range(0,115):#главный цикл обработки, перебирает города    borderstring = """(relation["type"="boundary"]["boundary"="administrative"]["name:be"=""" + city[number] + """][place=town]; relation["type"="boundary"]["boundary"="administrative"]["name:be"=""" + city[number] + """][place=city];);>; out skel qt;"""    roadstring = """(area[place=town]["name:be"=""" + city[number] + """]; way["highway"][highway!=service]["highway"!="footway"]["highway"!="track"]["highway"!="path"]    ["highway"!="cycleway"]["highway"!="pedestrian"]["highway"!="steps"]["highway"!="residential"](area);area[place=city]["name:be"=""" + city[number] + """]; way["highway"][highway!=service]["highway"!="footway"]["highway"!="track"]["highway"!="path"]    ["highway"!="cycleway"]["highway"!="pedestrian"]["highway"!="steps"]["highway"!="residential"](area););out body; >; out skel qt;"""    print('Getting data about', city[number],'...')        road = api.query(roadstring)        border = api.query(borderstring)    print('got data!, city:', city[number]) #получаем данные    for w in range(len(border.ways)): #перебирает линии границ        for i in range(len(border.ways[w]._node_ids)):#перебирает узлы линий границ             progressbar = i / len(border.ways[w]._node_ids) * 100            print(progressbar, "%;", w, "of", len(border.ways), "parts ready; city-", city[number])            A[0] = border.ways[w].nodes[i].lon            A[1] = border.ways[w].nodes[i].lat            if i == len(border.ways[w]._node_ids) - 1:                break            B[0] = border.ways[w].nodes[i+1].lon            B[1] = border.ways[w].nodes[i+1].lat            for j in range(len(road.ways)):                for k in range(len(road.ways[j]._node_ids)):                    C[0] = road.ways[j].nodes[k].lon                    C[1] = road.ways[j].nodes[k].lat                    if k == len(road.ways[j]._node_ids) - 1:                        break                    D[0] = road.ways[j].nodes[k+1].lon                    D[1] = road.ways[j].nodes[k+1].lat                    if line_intersection((A, B), (C, D)) == 1:                        amount += 1                        print(road.ways[j]._node_ids[k])    print(amount)    Total += amount * len(city[number])    ReadyData.write(str(city[number]))    ReadyData.write(str(amount))    ReadyData.write('\n')    amount = 0print('Total', Total) #и вывод всего


Заметки по коду


Я достаточно долго составлял запрос, подбирая разные типы дорог чтобы было меньше считать и чтобы не пропустить знаки. В итоговом запросе просто убраны те дороги, на которых нет знаков, например residential, service, footway, track и т. п.
Список городов я спарсил с википедии и сохранил в формате.тхт
Код выполняется достаточно долго, у меня даже один раз возникло желание переписать его на С++, но решил оставить так как есть. У меня он выполнялся два дня, все из-за проблем с диктатурой белорусским интернетом и перегруженностью сервера OverPass. Чтобы решить вторую проблему, нужно составить один запрос ко всем городам, но я еще не придумал как это нормально сделать.

Мой ответ на задачу

18981 буква



Что хочу сказать насчет правильности цифры: все упирается в качество данных самой OSM, то есть там есть места где, например, одну дорогу пересекает две линии границы, или где-нибудь на развязке граница проведена чуть-чуть не так, и в результате имеем лишнее/недостающее пересечение. Но это особенность конкретно этой не имеющей практического смысла задачи, в остальном OSM сила.

Вторая задача


Сейчас давайте посчитаем количество заправок в пределах Москвы:
area[name="Москва"];(  node["amenity"="fuel"](area);  way["amenity"="fuel"](area);  relation["amenity"="fuel"](area););out body;>;out skel qt;

Код
import overpyapi = overpy.Overpass()Data = api.query("""area[name="Москва"];(  node["amenity"="fuel"](area);  way["amenity"="fuel"](area);  relation["amenity"="fuel"](area););out body;>;out skel qt;""")print(len(Data.nodes)) #получаем общее количество узлов


Результат 489 заправок:
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru