Pull to refresh

Линукс параноя

Если ты параноик, ты не отрицаешь того, что кто-то за тобой наблюдает. Ты шифруешь диски, используешь 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» и добавил туда свою проверку:

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 за неё отдельное спасибо.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.