Попрацювавши на Коіба - ми поїдемо на каріби

Попрацювавши на Коіба - ми поїдемо на каріби

Крім цього, наші добровільні помічники - IT-шники повиколупували електронні тельбухи Коіба на сайті державних закупівель, де відповідний тендер проводила Центральна Виборча Комісія (ЦВК) Російської Федерації. Наші фахівці завантажили всю документацію до себе на комп'ютери, потім ознайомилися з отриманими нами на виборах матеріалами і проаналізували всю наявну інформацію.

Ми зустрілися з одним з офіцерів ФАПСИ ФСБ РФ, що добровільно погодився надати нам допомогу і дані якого, з відомих причин розкрити не можемо. Ми задали йому кілька запитань, відповіді на які вже зараз можуть пролити певне світло і розвіяти туман над ситуацією, що склалася навколо виборів до Ради депутатів міського округу Щербинка. Природно, більш детальну інформацію з прізвищами та іменами організаторів, виконавців і інших співучасників цього брудного злочину проти волевиявлення Щербинці в силу певних причин ми, поки розкривати не будемо. Але ми обов'язково до цього повернемося. Ми обов'язково розповімо про тих, хто заради досягнення своїх корисливих цілей, а також політичних амбіцій, обдурили цілий десятки тисяч виборців і кожному дамо моральну і правову оцінку. Отже ...

- Скажіть, а що з себе представляє так званий КОІБ?

КОІБ (комплекс обробки виборчих бюлетенів) - являє собою міні-комп'ютер, з вбудованим в нього електронним сканером, що зчитує з виборчого бюлетеня інформацію про те, як проголосував громадянин і, після закінчення голосування і в автоматичному режимі, що формує підсумковий протокол дільничної виборчої комісії. Він самостійно перевіряє справжність бюлетеня і підбиває підсумки голосування за кандидатів або партії.

- Які уразливості в програмному коді Коіба, використаних на виборах в Щербинці, видно Вам як програмісту і фахівця в області інформаційної безпеки? Чи є можливості для маніпуляцій і фальсифікацій результатів голосування?

Я не стану стверджувати, що описана нижче вразливість - це навмисно залишений бекдор, лазівка ​​для присвячених. Цілком можливо, що це просто промах розробників. Але з огляду на, що код Коіба проходив аудит на відповідність вимогам безпеки, це вже подвійний промах - і розробників, і аудиторів. Що наводить на думки про те, що все так і було задумано, тобто залишені можливості для фальсифікацій, які і були використані на виборах в Щербинці.

Якщо говорити технічною мовою, то знайдена уразливість відноситься до класу code injection (професійну мову програміста). Вона дозволяє в момент формування підсумкового протоколу голосування, за допомогою спеціальним чином підготовлених для КОІБ вихідних даних, виконати на комп'ютері, вмонтованому в КОІБ, довільний код. У тому числі і такий, який змінить кількість голосів, відданих за того чи іншого кандидата. Вранці. в день голосування, голова ДВК вставляє в КОІБ «ключовий носій», що представляє собою звичайну флешку, яку заздалегідь видають у вищій комісії. На цій флешці зберігається XML-файл з повною інформацією про вибори: коли починається і закінчується голосування, який є список кандидатів, в якому порядку вони розставлені в бюлетені, якого формату бюлетені і багато інших даних. Приклади записів взяті з технічного завдання, яке було розміщено на сайті госзакупкок.

Однак, крім перерахованих вище і очевидних параметрів, в тому ж файлі зберігається інформація про правила заповнення підсумкового протоколу голосування: скільки в ньому рядків, який текст повинен бути написаний в цих рядках, за якими формулами обчислюються числові значення і так далі.

Погляньмо на приклад вихідних даних, за якими КОІБ формує рядки протоколу:

Код, який виконує заміну рядків типу BlankType = NoMarks, VotingMode = Portable> на відповідний їм програмний код, знаходиться в файлі Common / Voting / Line.cs. Потім, після підстановки значень, код передається в компілятор C # (Common / Voting / SourceData.cs рядок 434). де він буде скомпільовано і відкладений до закінчення голосування. Коли голосування закінчується і формується протокол, рядок за рядком скомпільована програма виконується (Common / Voting / Line.cs, рядок 262).

Тут-то і виявилася захована вразливість. У формулу можна підставити виклик будь-якої функції, в тому числі, яка буде змінювати підсумки виборів:

Наприклад, таким чином можна проставити кандидату # 111 (з прикладу вище) 100 500 голосів. В результаті таких маніпуляцій можна абсолютно безболісно комусь додати голоси виборців, а у когось забрати. Причому логіку запрограмованих дій Коіба можна прописати будь-якої складності, яка буде перевіряти поточний відсоток за кожного з кандидатів, приймати рішення, скільки голосів перекинути і так далі. Зрозуміло, що просто додати голосів якомусь кандидату не вийде - в протоколі не зійдеться загальна кількість бюлетенів, і підтасовка відразу буде видно. А перекинути деяке число голосів з одного кандидата на іншого - безпрограшний варіант. Ніяким контролем, крім ручного перерахунку, виявити цю фальсифікацію буде неможливо. Де-факто виходить, що, не порушуючи цілісності пломб на Коіба, можна вплинути на результат голосування.

- Як саме це можна зробити?

У програмному коді Коіба є описана вище логіка, що дозволяє виконувати програмний код з флешки. Само по собі, це дуже серйозна дірка в безпеці. Однак, для того щоб скористатися таким способом фальсифікації, потрібно. щоб підміненого дані будь-яким чином потрапили в КОІБ.

Згідно з інструкцією по експлуатації КОІБ, з ранку в день голосування оператор зобов'язаний включити КОІБ і завантажити в нього вихідні дані: «Після запиту« Вставте Flash », вставити ключовий носій в головне скануючий пристрій (скануючий пристрій, до якого підключений принтер) і натиснути клавішу« ТАК »на задній панелі скануючого пристрою. Після цього на інформаційному табло головного скануючого пристрою з'явиться повідомлення «Завантаження вихідних даних ...».

Ключовий носій (флешка) видається голові ДВК напередодні виборів у вищій ТВК, щоб можна було провести тестове включення КОІБ, переконатися в його працездатності. Відповідальність за збереження ключа з цього моменту лежить на голові ДВК. Але найцікавіше, що закон навіть не вимагає від нього зберігати ключ-флешку в сейфі! Голова може взяти ключ додому і внести в нього потрібні зміни.

Хоча я не виключаю, що для збереження даних «від голів» використовуються і додаткові рівні захисту, які зроблять таку «лобову» атаку неможливою. Наприклад, флешка, на якій зберігаються дані, цілком може містити в собі криптоконтейнера, наприклад, що випускається, будь-якої вітчизняною компанією, яка не дозволить стороннім особам (голові ДВК) підмінити дані.

Однак, ніякого контролю з боку спостерігачів за тим, хто має право шифрувати і підписувати вихідні дані для флешок, законодавчо не встановлено. Це означає, що особи, які мають доступ до криптографічних ключів, все одно можуть змінити дані так, як їм заманеться. Яка б досконала криптосистема ні використовувалася, все одно її стійкість обмежена рівнем довіри до тих, хто формує вихідні дані. Нехай їх готує хоч сама ЦВК. Хто може гарантувати, що вводяться нею вихідні дані кристально чесні?

- Може бути, просто КОІБ робили трішечки криворукий програмісти без жодного злого наміру?

У исходниках коду через рядок написано, що розробники - КРОК (ЗАТ «КРОК Інкорпорейтед» - компанія, що працює в тісному контакті з Мосміськвиборчкомом):

Але це все, зрозуміло, дурниця, так як вписати що завгодно можна. Однак більш вагоме підтвердження, що це справа саме їх рук - участь КРОК в аукціоні на право виготовлення Коіба. Власне, КРОК і не приховує, що щільно працює з ЦВК і здійснює. наприклад, навіть сервісну і технічну підтримку системи ГАС «Вибори».

- Зрозуміло. Отже, як же може виглядати фальсифікація результатів голосування, з використанням виявлених в програмному коді Коіба прихованих можливостей?

Спосіб фальсифікації може виглядати так: голосування йде без будь-яких видимих ​​порушень - немає ніяких величезних додаткових списків, каруселей, вкидань, масового голосування на дому. А коли голосування закінчується, КОІБ видає результат, де співвідношення голосів перерозподілено на користь потрібних кандидатів. Все відбувалося на очах у спостерігачів, комар носа не підточить - ніяких підстав для ручного перерахунку голосів немає. Нічого не підозрюючи спостерігачі змушені погодитися, що вибори пройшли чесно.

Щоб захиститися від «заряджених» Коіба, законодавство передбачає обов'язковий річний перерахунок голосів на 5 відсотках дільниць, які обирають жеребкуванням. Як би на місці шахраїв зробити так, щоб Коіба, де буде ручний перерахунок, показали правильний результат, а все решта 95 відсотків - «потрібний»? Як подати сигнал Коіба, що ось тут вважай правильно, а тут можна шахраювати? Ідея! А давайте зробимо так: якщо КОІБ перезавантажать перед тим, як роздруковувати протокол, то будемо вважати чесно. А якщо не перезавантажать, то «як треба». Зробити це дуже просто: наприклад, як тільки стане відомо, що перерахунок буде на ділянці N, який - небудь ЧАБАНОВ дзвонить довіреній особі на ділянці і просить його вимкнути рубильник на хвилинку. Ну, або хтось про кабель живлення «випадково» спіткнеться. КОІБ перезавантажиться і видасть правильний протокол. Перезавантаження Коіба - це найпростіше рішення на такий випадок. До речі, в цей момент можна і ключовий носій (флешку) підмінити. Адже голова ДВК має дістати його з кишені (або де він там його зберігає) і знову, після перезавантаження, вставити в КОІБ. Йому можуть видати два ключа: один чесний, іншої немає. І інструкція - в разі проблем зі спостерігачами, перерахунком і т.д. перезавантажити КОІБ і вставити чесний ключ.

Протидіяти цьому можна тільки одним способом: спочатку все Коіба видають електронні протоколи, які підписуються членами ДВК, і з них знімаються копії для спостерігачів, а тільки потім проводиться жеребкування, вибираються ділянки для ручного перерахунку і, власне, проводиться перерахунок. В такому випадку можна буде реально упевнитися в чесності Коіба.

- Тобто нинішніх заходів забезпечення чесності голосування за допомогою КОІБ недостатньо?

Їх явно дуже недостатньо. Ось приклад алгоритму фальсифікації, який побудований на підставі виявлених вразливостей програмного коду Коіба. Уповноважені особи (з ЦВК, МГИК, ТВК або іншої організації, котрі готують вихідні дані для КОІБ) завантажують на ключовий носій вихідні дані, які при виконанні будь-яких зовнішніх умов виконуватимуть фальсифікацію. Таким умовою може бути, наприклад, відсутність перезавантажень з моменту включення КОІБ або певний час. Скажімо, якщо протокол підсумків виборів знімається в першій половині години, то фальсифікації не буде, а якщо у другій - то буде. Знайдена уразливість дозволяє описати програмну логіку будь-якої складності.

Голові ДВК (якщо він безпосередньо полягає в злочинній змові, спрямованій на фальсифікацію підсумків виборів) дається інструкція, що якщо йому буде оголошено про проведення ручного перерахунку на ділянці, то необхідно протокол підсумків з КОІБ зняти в першій половині години. Тоді дані будуть чесними. Якщо ручного перерахунку не буде, то під будь-яким приводом затримати зняття протоколу до другої половини години.

Непрямими ознаками того, що на вашій ділянці могла бути така фальсифікація, є: незрозумілі затримки в знятті протоколу з КОІБ, раптові відключення світла перед зняттям протоколу з КОІБ, будь-які інші нелогічні дії комісії стосовно КОІБ перед зняттям протоколу (перезавантаження, перемикання шнурів), справжньою метою яких є подати сигнал Коіба, як він повинен вважати - чесно чи ні. Загалом, способів багато, щоб обдурити спостерігачів і видати фальсифікацію за «чесні вибори».

Дійсно, після обробки бюлетеня КОІБ формує запис про це (Recognizer / RecognitionManager.cs, рядок 744):

І заносить її в журнал (Recognizer / RecognitionManager.cs, рядок 616):

WriteRecognitionResultToLog (recResult, stampResult, stampNumber, recLogAddInfoSb.ToString ());

З огляду на, що час фіксується з точністю до тисячної частки секунди (Recognizer / RecognitionManager.cs, рядок 750):

З огляду на, що ці дані на ключовий носій не заносяться, їх можна буде отримати тільки після виборів, підключившись до вбудованим в КОІБ комп'ютерів. Доступом до комп'ютерів, як мінімум мають техніки, які проводять наладку, діагностику і ремонт Коіба. Також, доступ до них є і у співробітників вищих виборчих комісій, оскільки вилучення даних з Коіба може знадобитися для проведення розгляду-перевірок. Доступ до цієї інформації можуть отримати і спецслужби.

- Чи можна взагалі організувати чисте і чесне голосування з Коіба технічно? Це повинен бути open-source-код у Коіба, щоб всі бажаючі могли спокійно його перевіряти, а не вишукувати сліди вгосзакупках?

Робити КОІБ з відкритим кодом марно, оскільки ніяким чином перед голосуванням перевірити, що в КОІБ завантажений саме той код, що викладений на загальний огляд, не можна. Хоча в цілому, КОІБ - відмінне рішення, щоб автоматично перевіряти справжність бюлетенів, перешкоджати вкидання пачок в урну, проводити альтернативний, що не залежить від людей підрахунок голосів.

Однак, щоб організувати чисте і чесне голосування, необхідно на кожній дільниці рахувати голоси і за допомогою Коіба і вручну. Ручний перерахунок дасть гарантію, що КОІБ НЕ махлював з голосами, а КОІБ дасть гарантію, що комісія не перекладатиме бюлетені з однієї стопки в іншу, збігати з підписаними протоколами, рвати або топити бюлетені в калюжі і так далі. Процедура повинна вимагати порахувати всі вручну, а потім роздрукувати протокол з КОІБ. Якщо не зійшлося, перераховувати вручну ще раз. Якщо раніше не зійшлося, в обов'язковому порядку фіксувати порушення.

Резюмуючи скажу, є два варіанти організації чесного голосування. Перший - коли перераховуються тільки 5 відсотків ділянок. Тоді критично важливо, щоб спочатку вийшов протокол з КОІБ, а потім була жеребкування. Так у комісії не буде можливості повідомити Коіба, щоб він вважав чесно. Другий варіант - обов'язковий річний перерахунок всіх ділянок. Тоді ніякої різниці немає, що буде спочатку: ручний підрахунок або зняття електронного протоколу.

Е те питання вимагає офіційної оцінки з боку представників правоохоронних органів і спецслужб у рамках наявних у них компетенцій.

Велике Вам спасибі за допомогу!

Розмову провів Е.Н. Каштанов