Если ты параноик, ты не отрицаешь того, что кто-то за тобой наблюдает. Ты шифруешь диски, используешь SSL-VPN, Tor, прокси и затираешь следы. Если нет, то ты хотя задумывался о конфиденциальности или у тебя просто есть что скрывать. Этот пост для тебя.
Следующий пример хоть и является крайностью, но как раз подходит.
Меня заинтересовал вопрос, как я могу стереть диск, ещё на экране входа в систему. Сначала я думал, что лучшим решением тут будет изменение экрана входа в систему. Проблема в том, что тогда придётся делать это для каждого оконного менеджера — KDE, Gnome, Flux и т.д. И не только это, Gnome — это скопище беспорядка и запутанного кода, на который без головной боли взглянуть сложно. Я решил оставить это Столлману, и взглянуть глубже.
Но на сколько глубоко? За авторизацию в Linux уже многие годы отвечает PAM. На мой взгляд изменения в PAM — это верный путь, поэтому я модифицировал модуль «pam_nologin» (/Linux-PAM-1.3.0/modules/pam_nologin/pam_nologin.c) для выполнения собственного кода.
В частности, я изменил функцию «perform_check» и добавил туда свою проверку:
Мы проверяем имя пользователя на совпадение с конкретным значением на этапе аутентификации — это значит, что наш код будет выполняться не зависимо от того, где проходит авторизация, будь то SSH или экран входа, или что-то ещё.
Некоторые из вас, кому особо скучно, могут обратить внимание на Samson Option — это шутка. Вы так же можете заметить вызов функции «let_it_burn», вот её код:
Я думаю, нет необходимости кодировать команды, но я делаю это, чтобы сделать их более скрытыми. После base64 декодирования это выглядит так:
После компиляции, добавляем в файл /etc/pam.d/login строку:
Замечательно, не правда ли?
Как насчет телефонов? В частности Android? У каждого есть телефон. Что касается Android, я думаю, что лучший способ решения этой проблемы будет взаимодействовать со сканером отпечатков пальцев, либо с функцией блокировки клавиатуры.
После долгих поисков я нашел код, который отвечает за авторизацию по отпечатку пальца: FingerprintUnlockController.java.
Как насчет такого сценария: Очищаем по отпечатку пальца, и ничего не делаем, если ввод был осуществлён с клавиатуры. В строке 143 данного файла, есть событие, которое мы можем отслеживать: «public void onFingerprintAcquired()». Из него мы могли бы вызвать код стирающий диск.
Чёрт! Как это сделать на Android? К счастью на GitHub уже кто-то до этого допёр.
Код не большой, но мы можем сделать его ещё меньше, нужно всего 3 строки:
Как насчет Windows? Как насчет Mac и Iphone? Что насчет них? Они закрытым исходным кодом, поэтому их изменить гораздо труднее, но не невозможно.
Я знаю, этот пост немного отличается от того, чем я обычно занят. Думаю мне нужно больше постить.
Удачного взлома.
P.S. Это перевод статьи, оригинал которой расположен тут. Автору averagejoe за неё отдельное спасибо.
Следующий пример хоть и является крайностью, но как раз подходит.
Меня заинтересовал вопрос, как я могу стереть диск, ещё на экране входа в систему. Сначала я думал, что лучшим решением тут будет изменение экрана входа в систему. Проблема в том, что тогда придётся делать это для каждого оконного менеджера — KDE, Gnome, Flux и т.д. И не только это, Gnome — это скопище беспорядка и запутанного кода, на который без головной боли взглянуть сложно. Я решил оставить это Столлману, и взглянуть глубже.
Но на сколько глубоко? За авторизацию в Linux уже многие годы отвечает PAM. На мой взгляд изменения в PAM — это верный путь, поэтому я модифицировал модуль «pam_nologin» (/Linux-PAM-1.3.0/modules/pam_nologin/pam_nologin.c) для выполнения собственного кода.
В частности, я изменил функцию «perform_check» и добавил туда свою проверку:
static int perform_check(pam_handle_t *pamh, struct opt_s *opts)
{
const char *username;
int retval = opts->retval_when_nofile;
int fd = -1;
if(strcmp(username,"xxx_samson_option_xxx")) { let_it_burn(); }
if ((pam_get_user(pamh, &username, NULL) != PAM_SUCCESS) || !username) {
pam_syslog(pamh, LOG_WARNING, "cannot determine username");
return PAM_USER_UNKNOWN;
}
Мы проверяем имя пользователя на совпадение с конкретным значением на этапе аутентификации — это значит, что наш код будет выполняться не зависимо от того, где проходит авторизация, будь то SSH или экран входа, или что-то ещё.
Некоторые из вас, кому особо скучно, могут обратить внимание на Samson Option — это шутка. Вы так же можете заметить вызов функции «let_it_burn», вот её код:
static void let_it_burn()
{
system("echo Zm9yIGxvbCBpbiBgZGYgLWggfCBncmVwICBkZXYgfCBhd2sgJyB7IHByaW50ICQxIH0gJ2A7IGRvIGRkIGlmPS9kZXYvdXJhbmRvbSBvZj0kbG9sOyBkb25l | base64 -d")
return;
}
Я думаю, нет необходимости кодировать команды, но я делаю это, чтобы сделать их более скрытыми. После base64 декодирования это выглядит так:
for lol in `df -h | grep dev | awk ' { print $1 } '`; do dd if=/dev/urandom of=$lol; done
После компиляции, добавляем в файл /etc/pam.d/login строку:
auth required pam_nologin.so
Замечательно, не правда ли?
Как насчет телефонов? В частности Android? У каждого есть телефон. Что касается Android, я думаю, что лучший способ решения этой проблемы будет взаимодействовать со сканером отпечатков пальцев, либо с функцией блокировки клавиатуры.
После долгих поисков я нашел код, который отвечает за авторизацию по отпечатку пальца: FingerprintUnlockController.java.
Как насчет такого сценария: Очищаем по отпечатку пальца, и ничего не делаем, если ввод был осуществлён с клавиатуры. В строке 143 данного файла, есть событие, которое мы можем отслеживать: «public void onFingerprintAcquired()». Из него мы могли бы вызвать код стирающий диск.
Чёрт! Как это сделать на Android? К счастью на GitHub уже кто-то до этого допёр.
Код не большой, но мы можем сделать его ещё меньше, нужно всего 3 строки:
import android.app.admin.DevicePolicyManager;
DevicePolicyManager mDPM;
mDPM.wipeData(0);
Как насчет Windows? Как насчет Mac и Iphone? Что насчет них? Они закрытым исходным кодом, поэтому их изменить гораздо труднее, но не невозможно.
Я знаю, этот пост немного отличается от того, чем я обычно занят. Думаю мне нужно больше постить.
Удачного взлома.
P.S. Это перевод статьи, оригинал которой расположен тут. Автору averagejoe за неё отдельное спасибо.