В результатах недавних выборов, прошедших в Швеции,
обнаружены следы попытки взлома. Дело в том, что шведские законы о выборах
позволяют избирателям вписывать свой вариант от руки. Кроме того, анонимный
список всех ответов, которые дали избиратели, публикуется в открытых
источниках. Любопытный блоггер Йонас Эльфстрeм (Jonas Elfström) обнаружил,
по меньшей мере, одну попытку взлома системы подсчета голосов – некий
технически подкованный избиратель внес в бюллетень специальный запрос на языке
управления базами данных SQL.
В большинстве стран на выборах используются готовые
бюллетени с фиксированным списком вариантов – избиратель может лишь поставить
галочку или другую отметку в поле напротив нужного варианта. Швеция в этом
смысле является исключением – здесь можно вписать любой свой вариант от руки.
Судя по всему, кому-то в голову пришла мысль о потенциальной уязвимости системы
учета голосов к так называемой «SQL-инъекции». В результате в открытом доступе
была обнаружена такая строка, вписанная анонимным избирателем: ";13;Hallands
län;80;Halmstad;01;Halmstads västra valkrets;0904;Söndrum 4;pwn DROP
TABLE VALJ;1". Само интересное в этой строке – команда «DROP TABLE»,
которая, если попадет в интерпретатор SQL-команд, вызовет полное уничтожение
таблицы. В данном случае, это таблица под названием «VALJ».
Интересно, что атака на базы данных с использованием такого
рода фрагментов кода на языке SQL в шутливой форме была описана в одном из комиксов
из серии XKCD, где герой назвал своего
ребенка именем «); DROP TABLE Students; --». При малейшей небрежности
разработчиков системы такое имя привело бы к удалению таблицы Students во всех
системах, где встречалось бы подобное имя.
Кроме SQL-атак в последних шведских выборах встретилась и
еще одна атака, правда, столь же безуспешная. На этот раз злоумышленник или
шутник вставил вместо своего варианта строку «R;14;Västra Götalands län;80;Göteborg;03;Göteborg,
Centrum;0722;Centrum, Övre Johanneberg;(Script src=http://hittepa.webs.com/x.txt);1».
При отображении результатов на веб-сайте шведской избирательной комиссии
подобный текст мог бы вызвать внешний сценарий на языке JavaScript и нарушить
нормальную работу сайта. К счастью, все результаты голосований отображаются на
веб-сайте как неформатированный текст, а не в формате HTML, поэтому попытка
вставить свой сценарий не сработала.
Кроме SQL-атак с использованием команд DROP TABLE и DROP DOWN
(полное уничтожение всех таблиц в СУБД) и атак с попыткой вставить внешние JavaScript-сценариев,
наблюдатели обнаружили целый ряд ссылок на различные Интернет-магазины и другие
веб-сайты. В целом, использование современных технологий в сочетании со столь
демократичными избирательными законами потенциально может привести к самым
неожиданным казусам. Вообще, этот пример является хорошим уроком для всех
разработчиков приложений, где используются базы данных и другие широко
известные технологии, способные интерпретировать вводимый текст как команды.
Подробнее о попытках взломать электронную систему учета и
отображения результатов голосования в избирательной системе Швеции с
использованием лишь бумаги и ручки можно прочитать в обзорах на сайтах Wired
и Switched.