Праблема: сляпы давер
Калі вы ўсталёўваеце праграму-радыёняню, вы даяце ёй доступ да вельмі асабістай прасторы — пакоя вашага малога. Праграма слухае, а часам і назірае. Пры гэтым бацькі часта не бачаць, што адбываецца ў фонавым рэжыме: ці праходзяць трансляцыі праз серверы трэціх бакоў, ці збіраюцца даныя аб выкарыстанні, хто тэхнічна можа атрымаць да ўсяго гэтага доступ?
Шчыры адказ: у выпадку многіх праграм вы гэтага не ведаеце. Код закрыты, а пра архітэктуру вядома толькі са слоў распрацоўшчыка. У выніку вам прапануюць проста паверыць пастаўшчыку праграмы.
Закрыты код, адкрытыя слабасці
За апошнія гады было нямала паведамленняў пра ўзломы радыёнянь. Староннія маглі падслухоўваць, паварочваць камеры або гаварыць праз дынамікі. Часцей за ўсё гэта былі не нейкія экзатычныя атакі, а сур'ёзныя недахопы: незашыфраваныя злучэнні, стандартныя паролі, адсутнасць аўтэнтыфікацыі.
У выпадку прапрыетарнага праграмнага забеспячэння староннія спецыялісты часта заўважаюць такія слабасці толькі пасля таго, як нешта здарылася. Даследчыкі бяспекі, незалежныя распрацоўшчыкі і бацькі могуць ацэньваць гатовы прадукт толькі звонку. Для прылады ў дзіцячым пакоі гэта ненадзейная мадэль.
Празрыстасць як прынцып бяспекі
У інфармацыйнай бяспецы ёсць старое і карыснае правіла: прынцып Керкгофса. Бяспека не павінна залежаць ад таго, што канструкцыю сістэмы трымаюць у сакрэце. Сістэма мусіць заставацца бяспечнай, нават калі хтосьці ведае, як яна ўладкавана.
Адкрыта задакументаваны код сам па сабе не робіць праграму бяспечнай. Але ён дазваляе правяраць сцвярджэнні аб яе бяспецы. Спецыялісты могуць вывучаць патокі даных, вывад ключоў і правілы працы, а не толькі чытаць маркетынгавыя тэксты.
Падыход Timmy: адасобленая аснова бяспекі
У Timmy я цяпер вельмі выразна аддзяляю часткі, якія сапраўды крытычныя для бяспекі. Не кожны элемент інтэрфейсу вызначае, ці заслугоўвае прадукт даверу. Вырашальнае значэнне маюць логіка сервернай часткі, правілы сігнальнага абмену, крыптаграфія спалучэння прылад і тое, якія даныя трапляюць на сервер.
Таму аснова бяспекі цяпер знаходзіцца ў публічным рэпазіторыі baby-monitor-timmy-core. Поўны код праграмы цяпер не публічны. Крытычныя для бяспекі кампаненты вынесеныя з інтэрфейсу і логікі прадукту, каб іх можна было асобна дакументаваць і правяраць.
Што гэта азначае на практыцы?
- Выразныя межы: кампаненты бяспекі аддзеленыя ад інтэрфейсу і логікі прадукту.
- Патокі даных, даступныя для аўдыту: спалучэнне прылад, сігнальны абмен і інтэрфейсы сервернай часткі можна дакументаваць асобна.
- Без схаваных трэкераў: крытычныя шляхі ўтрымліваюць толькі тое, што тэхнічна неабходна.
- Зручнасць доўгатэрміновай падтрымкі: асобную аснову лягчэй правяраць, чым неструктураваны маналіт.
Выснова: бацькі заслугоўваюць празрыстасці
Калі праграма мае доступ да дзіцячага пакоя, яна павінна канкрэтна адказваць на важныя пытанні: Якія даныя ствараюцца? Куды яны трапляюць? Хто можа іх прачытаць? Бацькі заслугоўваюць большага, чым значок прыватнасці ўнізе старонкі.
Baby Monitor Timmy павінен паказаць, што добры прадукт і бяспека, даступная для аўдыту, могуць спалучацца. Для мяне гэта не значыць рабіць публічным кожны куток праграмы. Гэта значыць адкрываць часткі, ад якіх залежаць спалучэнне прылад, сігнальны абмен, доступ да сервернай часткі і патокі даных.