Агенцията за национална сигурност на САЩ по време на конференцията RSA обяви, че отваря кода на Ghidra – инструментариума за провеждане на реверсивно инженерство на софтуера. Ghidra включва дизасемблер, поддържащ и декомпилиране до програмния език C и представящ мощни средства за анализа на изпълнимите файлове. Кодът е написан на езика за програмиране Java и съвсем скоро ще започне неговото предлагане под Apache 2.0 лиценза. Качването на кода в GitHub вече започна. Продуктът ще може да бъде изтеглен и от сайта ghidra-sre.org. Интересно е, че този уеб сайт е недостъпен за руските потребители.

Проектът се развива от вече 20 години и активно се използва от специалните служби на САЩ за разкриване на вградени задни врати в софтуера, за изучаване на изпълнимите файлове и за анализ на получения от дизасемблера код. Възможностите на продукта надвишават разширената версия на популярния пакет IDA Pro, но е фокусиран предимно върху анализа на кода и не включва дебъгер. От друга страна, Ghidra разполага с декомпилатор към псевдо код, приличащ на С. В IDA Pro тази възможност се осигурява чрез външни плъгини. Ghidra разполага с твърде мощни средства за съвместен анализ на изпълнимите файлове.

Основни особености на Ghidra:

  • Поддръжка на инструкциите на различни процесори и различни формати на изпълнимите файлове
  • Анализ на изпълнимите файлове за Linux, Windows и macOS
  • Пакетът включва дизасемблер, асемблер, декомпилатор, генератор на граф за изпълнението на циклите, условните и безусловните преходи в програмите, модул за създаване на скриптове и голям комплект помощни софтуерни инструменти
  • Възможност за работа в интерактивен и автоматичен режим
  • Поддържат се плъгини, с които се реализират нови компоненти
  • Поддържа се автоматизация на действията и разширение на функционалността чрез скриптове на програмните езици Java и Python
  • Вградени средства за съвместна работа на групи специалисти и координация на работата при обратното инженерство на много големи проекти

Любопитно е, че няколко часа след началото на публикуването на Ghidra, в пакета бе открита уязвимост в режима за настройка, който по подразбиране е изключен. В този режим се отваря мрежовия порт 18001 за отдалечена работа чрез протокола JDWP (Java Debug Wire Protocol). По подразбиране всички мрежови връзки са се осъществявали чрез всички достъпни мрежови интерфейси, а не чрез 127.0.0.1. Това е давало възможност към Ghidra да се осъществи връзка от други системи и да се изпълни произволен код в контекста на приложението. Така например, става възможна връзката с дизасемблера – да се прекъсне изпълнението чрез изкуствено поставена точка на прекъсване, където да бъде поставен собствен код с помощта на командата „print new“. Например „print new java.lang.Runtime().exec(‘/bin/mkdir /tmp/dir’)“.

Допълнително можем да отбележим публикуването на почти изцяло промененият отворен интерактивен дизасемблер REDasm 2.0. Програмата е характерна със своята разширяема архитектура, даваща възможност за включването на допълнителни модули със собствени инструкции и аналитични инструменти, пакетирани като модули. Кодът на проекта е написан на програмния език С++ (интерфейсът използва Qt) и се разпространява чрез GPLv3 лиценза. Поддържат се операционните системи Windows и Linux.

В базовата версия на Ghidra се поддържат PE, ELF, DEX (Android Dalvik) файловете, както и форматите на фърмуерите на Sony Playstation, XBox, GameBoy и Nintendo64. От процесорните инструкции се поддържат x86, x86_64, MIPS, ARMv7, Dalvik и CHIP-8. Поддържа се интерактивен режим, много подобен на този от IDA. Възможен е анализът на многопоточни приложения, вграден е енджин за работа с цифровите подписи (работи с SDB файловете).