The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Facebook открыл код статического анализатора Mariana Trench

30.09.2021 11:51

Facebook представил новый открытый статический анализатор Mariana Trench, нацеленный на выявление уязвимостей в приложениях для платформы Android и программах на языке Java. Предоставляется возможность анализа проектов без исходных текстов, для которых доступен только байткод для виртуальной машины Dalvik. Из достоинств также выделяется очень высокая скорость выполнения (анализ нескольких миллионов строк кода занимает около 10 секунд), что позволяет применять Mariana Trench для проверки всех предлагаемых изменений по мере их поступления. Код проекта написан на языке C++ и распространяется под лицензией MIT.

Анализатор был разработан в рамках проекта по автоматизации процесса рецензирования исходных текстов мобильных приложений Facebook, Instagram и Whatsapp. В первой половине 2021 года половина из всех уязвимостей в мобильных приложениях Facebook была выявлена при помощи инструментов для автоматизированного анализа. Код Mariana Trench тесно переплетается с другими проектами Facebook, например, для разбора байткода использованы наработки оптимизатора байткода Redex, а для наглядной интерпретации и изучения результатов статического анализа - библиотека SPARTA.

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

Работа анализатора сводится к определению источников поступления данных и опасных вызовов, в которых исходные данные не должны применяться - анализатор отслеживает прохождение данных по цепочке вызовов функций и связывает исходные данные с потенциально опасными местами в коде. Например, в качестве требующего отслеживания источника рассматриваются данные, поступившие через вызов Intent.getData, а в качестве опасных применений вызовы Log.w и Runtime.exec.



  1. Главная ссылка к новости (https://engineering.fb.com/202...)
  2. OpenNews: Facebook представил Pysa, статический анализатор для языка Python
  3. OpenNews: Выпуск Psalm 3.12, статического анализатора для языка PHP. Альфа выпуск PHP 8.0
  4. OpenNews: Релиз статического анализатора cppcheck 2.1
  5. OpenNews: Релиз свободного статического анализатора кода frama-clang 0.0.5
  6. OpenNews: Facebook открыл RacerD, статический анализатор для многопоточного кода на Java
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/55888-mariana-trench
Ключевые слова: mariana-trench, facebook, static, analizer
Поддержать дальнейшую публикацию новостей на OpenNET.


Обсуждение (32) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, InuYasha (??), 13:11, 30/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    "Big business работает на Java" - говорили они... Ан, вот, настоящий performance-critical big-biz почему-то плюшевый. )
     
     
  • 2.3, InuYasha (??), 13:12, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Жаль только, что анализатор не для самих плюсов. Но для них и так анализаторы есть.
     
  • 2.8, Аноним (8), 13:35, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Это для того, чтобы сам себя не мог проверить. Если Анализатор может проверить и сам себя, то выявленные ошибки на кого писать?
    А если серьезно надо отличать софт используемый бизнесом и софт на котором делается бизнес.
    Требования к ним могут оказаться совсем разными.
     

  • 1.6, Аноним (-), 13:29, 30/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Стал неконкурентоспособным перед свободными решениями, вот и решили открыть код.
     
     
  • 2.7, QwertyReg (ok), 13:32, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Типичная реакция "свободного сообщества". Корпорация открывает код, фактически, дарит коммерческий продукт, написанный профессионалами, всем желающим, но наших фанатиков не проведёшь, тут есть подвох, нам подачек не надо. Правда, фанатик скромно умалчивает, что это за "свободное решение" такое и также предпочитает не замечать, что весь Linux построен на подобных "подачках", начиная от CUPS и заканчивая Firefox.
     
     
  • 3.49, Аноним (49), 02:33, 03/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    знаем мы ваших профессионалов
     
  • 2.10, Аноним (10), 13:48, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > перед свободными решениями

    Не будем говорить о конкурентоспособности, но таковые существуют ли вообще хотя бы?

     

  • 1.18, Аноним (18), 14:50, 30/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Странно, а 'infer' разве не от facebook? Зачем им ещё один анализатор?
     
     
  • 2.24, Аноним (24), 15:52, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вы логотип видели? Думаете велосипед там просто так нарисован?
     

  • 1.19, mos87 (ok), 15:24, 30/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    там протесты уже идут? против названия
     
     
  • 2.34, ip1982 (ok), 21:06, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Mariana Trench - это Марианская впадина.
     

  • 1.21, Аноним (24), 15:41, 30/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >CMake 3.19.3 or higher is required.  You are running version 3.18.4

    В Ubuntu, как всегда, CMake протухший

     
     
  • 2.40, mos87 (ok), 07:53, 01/10/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    но ведь это только autotools протухают и особо одарённые завязываются на их конкретные версии

    да ведь?! смузихлёбы не могут нам врать!

    или смузи уже перешли на нинзи мезоны и тд бггг

     

  • 1.22, pashev.me (?), 15:41, 30/09/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    То есть, то что делает борроу-чекер в расте 😏
     
     
  • 2.27, Ordu (ok), 17:13, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Не, они отслеживают пути данных. Борроу-чекер не запрещает взять пароль и скинуть его в лог.
     
     
  • 3.29, Аноним (24), 18:43, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Но как программа узнает, что пароль - это пароль, без предварительной аннотации. Машинным обучением?
     
     
  • 4.30, Ordu (ok), 18:48, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Но как программа узнает, что пароль - это пароль, без предварительной аннотации.
    > Машинным обучением?

    По источнику данных. Пароль не берётся ниоткуда.

     
     
  • 5.31, pashev.me (?), 19:23, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Приведи пример, солнышко.

    Как насчёт опечаток

    username = getPassword();
    password = getUsername();


    Даже в формах на сайтах так можно накосячить.

     
     
  • 6.32, Ordu (ok), 19:46, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Приведи пример, солнышко.

    Я не знаю, откуда там программы на андроиде извлекают пароли, и какие API для этого есть.

    > Как насчёт опечаток
    > username = getPassword();
    > password = getUsername();

    Что это за getPassword и getUsername? Откуда они тягают пароль и пользователя? Как они это делают? К каким-то API обращаются? Давай сюда более полный пример, без этого никак: анализ кода идёт на уровне машинных кодов, соответственно, тебе в примере всё надо свести к границам между машинным кодом и внешним миром.

    Или хочешь я пример приведу?

    Вот пишешь ты C'шную программу, которая запрашивает пароль у пользователя, и делаешь libc'овый вызов getpass. Этот getpass в базе данных анализатора, который палит -- "ага, возвращаемый указатель -- это указатель на пароль", и дальше отслеживает этот указатель, обращая внимания на все strdup, strcpy и прочие.

     
     
  • 7.35, ip1982 (ok), 21:07, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Как они это делают? К каким-то API обращаются? Давай сюда более полный пример

    Не, не, Mariana Trench. Давай сама :)

     
     
  • 8.37, Ordu (ok), 21:16, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Выше приведён пример, читай внимательнее ... текст свёрнут, показать
     
  • 7.39, Карабьян (?), 06:18, 01/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Дайте пример (название) такого сишного анализатора
     
  • 5.33, Аноним (24), 19:46, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и как? Один пароль прочитали из текстового конфига. Другой - из текстового поля обычного, не для паролей. Потому что поле для паролей разраб сделал кастомное из обычного текстового. И имён переменных внутри apk нет, их сожрал оптимизатор. А имена, которые не сожрал оптимизатор, сожрал proguard.
     
     
  • 6.36, Ordu (ok), 21:15, 30/09/2021 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну и как? Один пароль прочитали из текстового конфига. Другой - из
    > текстового поля обычного, не для паролей. Потому что поле для паролей
    > разраб сделал кастомное из обычного текстового. И имён переменных внутри apk
    > нет, их сожрал оптимизатор. А имена, которые не сожрал оптимизатор, сожрал
    > proguard.

    И чё? Ты ждёшь от статического анализатора, чтобы он тебе 0% false positive'ов находил, и 0% false negative'ов? Зря ждёшь, не дождёшься, таких не бывает.

     

  • 1.38, Аноним (38), 03:25, 01/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как же открытый статический анализатор для php? Неужели слились?
     
     
  • 2.41, anonymous (??), 10:28, 01/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Как одно другому мешает?
     

  • 1.42, pashev.me (?), 12:32, 01/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    В Расте и Хаскеле очень просто предотвратить например вывод секретов в лог - не реализовывать соответствующий трейт или класс. Или реализовывать так, чтобы секреты не выводились или выводились звёздочками.

    То есть, проблема решается дёшево и сердито. Безо всяких анализаторов.

     
     
  • 2.43, inferrna (ok), 13:40, 01/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Мдэ. Пароль у тебя в String'ах, написал разок
    let pass = dbg!(getPassword());

    и забыл. А если пароли по специальным структурам распихивать, то это и на жабе можно секурно сделать.

     
     
  • 3.45, Alladin (?), 19:51, 01/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Поправочка, не в String, а в структуру с полем String.

    Добавляем нужную обвязку для звездочек в данную структуру, некоторые надуманные защиты в виде автоперезаписи String при drop структуры и все ок.

     

  • 1.44, Аноним (44), 17:43, 01/10/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    И снова не раст)))
     
     
  • 2.46, Alladin (?), 19:52, 01/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да, бо в расте это давно есть и не одно, а целое множество..
     
  • 2.50, anonymous (??), 12:46, 03/10/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Что сказать-то хотели? Да, в мире есть не только Rust. Это для вас новость?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:
    При перепечатке указание ссылки на opennet.ru обязательно



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру