Аппаратная и системная безопасность · NUS Computing
Мы изучаем безопасность и корректность нижних уровней вычислительных систем. Мы находим уязвимости, скрытые глубоко в аппаратуре и системах, и создаём средства защиты от них.
Четыре небольшие игры, по одной на каждую тему исследований, с уровнями, магазином и чипом дня. Звук включён, и кнопка его выключает.
Фаззинг и валидация
Отслеживание информационных потоков
Формальная верификация
DRAM и Rowhammer
Баги выползают из чипа и спускаются по плате. Обвязка стреляет сама: управляйте ею, уничтожайте баги сериями ради множителя и ловите то, что они роняют. Чип считается профаззенным, когда его таймер истёк, а босс-эррата повержен. Каждый чип приносит новую топологию, новый вид багов и магазин, где за очки покупаются улучшения обвязки. Пропущенные баги стоят очков, а каждый пятый ещё и жизни.
Найдено баговКомбоЧипВремяЖизниНайдите баги до тейп-аута.Управляйте стрелками или перетаскиванием. Пробел — перезапуск питания.Перетаскивайте, чтобы вести стенд. Коснитесь «Перезагрузка» в рамке, чтобы очистить поле.Обвязка упала.СбежалиВолна {n} из {m}Эррата исправленаВеерный выстрелЩит поднятСкорострельностьПерезагрузкаЗалп дрона+1 перезагрузкаРаздавлено багов на этом чипе: {n}Эррата выпущена без исправления: −1 жизньСбежал: −150{name} пробит: −{n}Чистых блоков: {n} из {m} · скидка {p} % в магазинеЧистый чипОбвязка упалаЧип {n} из {m} профаззенTape-out! Чип подписан.8 чипов до tape-outЧип {n} из {m}Выпущен с багами: −1 жизньНовый баг: глитчи мечутся и прыгаютНовый баг: роухаммеры проносятся и роняют сбоиНовый баг: спектры то появляются, то исчезаютНовый баг: червям нужно пять попаданийНовый баг: мимики притворяются шоколадомРазгонШоколадные крыльяИглаМагнитЗапасное ядроКнопка сбросаЩит при загрузкеНапарникСписок эрратЗалпХладагентФорсажПылесосТурельОтладчикСамонаводящиеся пулиДва стволаПонижение частотыТяжёлые пулиОплавлениеЗапасной кристаллКриобомбаСамопроверкаЧутьё на добычуТвёрдые рукиПатронташБонус за покрытиеЗапасной кристалл: ещё одна жизньВыстрелы чаще.Всегда три выстрела веером.Пули пробивают ещё одного жука.Ближние бонусы тянутся к вам.Ещё одна жизнь.Ещё одна бомба на каждом чипе.Каждый чип начинается со щитом.Дрон, стреляющий рядом с вами.Боссы получают в полтора раза больше урона.Каждый четвёртый залп веером.Просадки и пробуксовка длятся вдвое меньше.Движение на четверть быстрее.Все бонусы тянутся к вам.Турель стреляет с нижнего края.Бронированные жуки получают двойной урон.Пули поворачивают к ближайшему жуку.Два выстрела бок о бок.Жуки ползут на пятнадцать процентов медленнее.Ещё единица урона крепким жукам.Разбитый щит восстанавливается за двадцать секунд.Раз за игру последняя жизнь возвращается.Бомба замораживает уцелевших на две секунды.Жизнь возвращается в конце каждого чипа.Бонусы выпадают вдвое чаще.Комбо переживает побег.Бомба за каждые пятнадцать найденных жуков.На тридцать процентов больше очков за жука.Огневая мощьСтендКомандаОтключение тактированияПросадка питанияШторм баговГидра делитсяУдар титанаСкачок напряжения: быстрая стрельбаОкно отладки: баги замедлены и видныПерегрузка кэша: баги ускоряютсяКремниевая лотереяВнесение сбоевЗолотой баг!Золотой баг раздавленБронированОткрытБосс-эрратаБаг-гидраГейзенбагТитан RowhammerГонкаПереполнение буфераБаг, ушедший в сериюСрубишь одну, вырастут двеЕсть, пока не смотришьБьёт по кристаллуДва потока, один замокНа один байт большеНайдёшь меня в списке эррат. Страница 40.Каждое исправление — ещё два бага.Подключи отладчик — и я исчезну.Каждая строка, по которой я бью, переворачивается.Кто первый к замку, тот и победил. Я оба.0xFF, и ещё один.Помечен как исправленный.Больше нечему расти.Замечен. Схлопнулся.Обновлён навсегда.Сериализован.Границы проверены.ПересечениеБуфер полонОн открывается сразу после каждого залпа: стреляйте тогдаЕго порождения защищают его: сначала раздавите червейЕго можно поразить, только пока он виденОн уязвим, только пока разворачивается у краёвОн открывается, когда его бегуны пересекаются: стреляйте в точку встречиБейте, пока его буфер полон, до того как он прольётсяТвёрдые рукиТолстая кожаБыстрые ногиДлинный фитильСкидкаТейп-аутПост-кремнийЗондСачокСборщикКаждые несколько секунд он метит жука: помеченный жук стоит вдвое большеОн ловит жука, который вот-вот сбежит, а потом ему нужна паузаОн приносит бонусы, до которых вам не дотянуться{name} присоединяется к стендуПомечен ×2ПойманПринесеноКремний вернулся с фабрики. Посмотрим, что оттуда выползет.Ведите стенд под жуков. Он стреляет сам.Жуки роняют детали. Проезжайте по ним.Каждая волна быстрее прежней. Полоса сверху — часы чипа.Первый жук раздавлен. Цепочка убийств даёт множитель.Один прорвался. Пять побегов — и баг уходит в серию.Под кристаллом шевелится что-то большое.Эррата. Ловите момент, когда она откроется.Список эррат обновлён. Отгружаем и делаем новую ревизию.Новая ревизия. Новый план кристалла, новые жуки, и я позвал подмогу.С этого чипа жуки плюются сбоями. Уклоняйтесь от крестиков.Полпути до выпуска. Отсюда жуки в броне: шестиугольник значит «ждать».Мимики похожи на шоколад. Стреляйте по тому, что движется.Последний чип. До выпуска — одна эррата.Выпущено. Идите праздновать.
Значения покидают ядро и идут по проводам кристалла к его портам. Некоторые из них секретны. Выберите башню на панели сверху и коснитесь поля, чтобы её поставить: трекеры и снифферы помечают заражённые значения в радиусе действия, но вмещают лишь несколько меток, после чего их нужно сбросить касанием, очистители сразу забирают одно значение и перезаряжаются, маяки замедляют значения, а сбросчики перезаряжают башни вокруг себя. Каждая волна начинается с фазы строительства. Заражённые значения ищут слабо прикрытые места, ходят группами, а позже глушат трекеры рядом с собой. На крайний случай есть несколько ручных очисток. Каждая волна приносит больше значений и открывает магазин.
ПойманоКомбоВолнаОсталось утечекОсталось значенийОхраняйте порты.Выберите башню на панели и коснитесь поля, чтобы поставить её. Коснитесь заражённого значения, чтобы очистить его вручную. Коснитесь башни, чтобы открыть её меню.Выберите башню на панели и нажмите на поле, чтобы поставить её. Коснитесь заражённого значения, чтобы очистить его. Во время фазы постройки башни можно перетаскивать.Утечка.УтеклоВолна {n} из {m} отбитаКристалл защищён.10 волн, чтобы защитить кристаллВолна {n} из {m}Трекер установленТрекер заполненНе хватает очковНа проводеСлишком близко к башнеДержитесь подальше от ядра и портовЗа краемПоставить здесьОпустить здесьКоснитесь места, где она должна стоятьПовысить рангПродатьПереместитьПродано: +{n}ПеремещенаПеремещена: коснитесь, чтобы сброситьПеретаскивайте башни, чтобы переставить их бесплатноОчищено вручнуюРучных очисток не осталосьСброшеноПолон: коснитесь, чтобы сброситьУтечка!Заражение распространилосьДеление!Удачный пингРучные очисткиВсё чистоПоймано подряд: {n}+1 ручная очисткаОтправить дронНовое: бронированным значениям нужно три метки, танкам шестьНовое: скрытые значения и мимики, видимые только рядом с трекером или снифферомНовое: делители, рои и спринтерыНовое: переносчики, фантомы и зашифрованные значения, которые должен вскрыть снифферНовое: глушилки замораживают башни, пиявки их опустошаютНовое: лекари снимают метки вокруг себяНовое: бомбардировщики опустошают башни вокруг себяРуткит вычищенТроян раскрытЧервь очищенТроян очищенПризрак очищенКейлоггер очищенЗаписываетСбой питания: буферы падаютОбновление прошивки: башни сброшеныТревога утечки: заражённые значения спешатАудит: ручные очистки восполненыТуман: все значения на одно лицоЧервьТроянПризракРуткитКейлоггерСегмент за сегментомВыглядит чистым, пока не перестанетНикогда не на том проводе, где вы думаетеВладеет кристалломЗаписывает каждое касаниеМетьте мой хвост сколько угодно.Пропустите меня. Я чистый.Какой провод? Не тот.Я был здесь до ваших башен.Я видел это касание. И это тоже.Обрублен с головы.Разоблачён у порта.Пригвождён.Выселен из кольца 0.Журнал стёрт.Сначала очистите голову: пока она жива, сегменты в бронеПосле разоблачения он замедляется: тогда и навалитесьСразу после прыжка он плотный: метьте его тогдаОн лечится за счёт роя: сначала очистите ройОн прыгает туда, где вы касаетесь, и на миг записывает: касайтесь рядом с башнямиРуткит лечится за счёт рояРасшифрованоВзрыв: башни опустошеныРанг повышенУже высший рангВетеранБиты: +{n}Мастер-ключ: все башни сброшеныПатрульный дронГлубокие буферыУчебный лагерьЗапасная перчаткаБыстрый сбросЗапасной портОптовый заказУдачный пингСтраж портаРазгонСамосбросХолодные рукиНаградаСейфАнтеннаСейф: жизнь не потерянаМуштраДоктрина снайпераШок при сбросеДоктрина ГатлингаБыстрые рукиПошлинаПолный возвратСтартовый капиталЗащита от глушенияГлубокая меткаСвободный переносГлушитель тревогиДрон, который патрулирует, метит и сбрасывает.Башни держат на одну метку больше.Башни достают дальше.Ещё один заряд очистки.Сброс происходит мгновенно.Ещё одна жизнь.Башни стоят на четверть дешевле.Больше добычи и подарок каждые десять секунд.Страж у каждого порта чистит одно значение за волну.Башни метят на четверть быстрее.Пустая башня сбрасывается сама через шесть секунд.Очистка замедляет значения вокруг.Добыча выпадает вдвое чаще.Первая утечка волны не стоит жизни.Все башни достают чуть дальше.Башни раньше становятся ветеранами.Дальний охват, медленнее метки.Сброс замедляет заражённые значения рядом.Быстрые метки, короче охват.Заряды возвращаются быстрее.На четверть больше очков за перехват.Продажа башни возвращает полную цену.Очки в начале каждой волны.Глушилки не глушат ваши башни.Бронированным значениям нужно на одну метку меньше.Перенос башни сохраняет её метки.Тревоги длятся вдвое меньше.Страж порта поймал егоБашниРукаКомандаЗначения через {n} сЗоркий глазГлубокие карманыБольшие буферыТвёрдая рукаСкидкаГончаяАудиторКурьерОна бегает по проводам и лает на скрытые и замаскированные значения, замедляя ихВремя от времени он пополняет самую пустую башнюОн собирает добычу за вас{name} присоединяется к патрулюГав: раскрытПроверено: пополнено
Трасса бежит по пространству состояний, по одному состоянию за такт, и никогда не останавливается. Переходите с дорожки на дорожку, чтобы добираться до утверждений и уворачиваться от недостижимых состояний, стен границы и контрпримеров, которые охотятся за трассой; прыгайте, чтобы пропустить состояние. Бюджет решателя тает, а каждое утверждение его пополняет; тайм-аут стоит трассы. Достаточно утверждений доказывают границу и открывают магазин; каждая граница бежит быстрее и приносит новый трюк.
УтвержденияКомбоГраницаОсталось трассБюджетРазверните трассу.Стрелки или касание рядом с трассой меняют полосу. Пробел или касание трассы — прыжок. Удерживайте «вниз», чтобы тормозить.Коснитесь рядом с трассой, чтобы сменить полосу, коснитесь трассы, чтобы прыгнуть. Удерживайте «Тормоз» в рамке, чтобы замедлиться.Трассы кончились.Потеряно трассГраница {n} из {m}Недостижимое состояниеКонтрпример раздавленГраница {n} из {m} доказанаВсе границы доказаны.10 границ, которые нужно доказатьНовое: червоточиныНовое: стены границы с одним проходомНовое: ложные контрпримеры, безвредныеНовое: взрывы состоянийТайм-аут решателя: −1 трассаТрассу поймал контрпримерЛожныйЛемма: щит поднятТочка покрытияПрыжок через червоточинуПрыжокТормозДалее+{n} sВзрыв состоянийПодсказка решателя: безопасная полоса светитсяДедлайн: бюджет тает быстроДождь леммКонтрпримерЦиклСоперник-решательАбстракцияВзрыв состоянийПрыгните в его бросок, чтобы ранить егоПрыгните сквозь кольцо, когда оно проносится мимоДокажите то, что он собирается украсть, прямо под нимПройдите сквозь неё, пока она абстрактна, или перепрыгнитеКаждое доказанное утверждение сдерживает егоДвойникиБешенствоЧетыре состоянияДвойной циклОставляет следЗовёт контрпримерыШире, с проходомОбвалЦепная реакцияРасплавление{name} присоединяется к забегу{name}: уровень {n}ПерезагрузкаДоказаноПриманка: контрпример раздавленОракул: решатель думаетКонтрпример опровергнутЦикл разорванСоперник обогнанАбстракция уточненаВзрыв сдержанТрасса, которая проваливаетсяСнова и снова по кругуБыстрее на каждом утвержденииТри полосы, ни одного состоянияДва в степени NМне нужен всего один путь.Каждый такт — те же состояния.Я докажу это первым.Слишком грубая, чтобы поймать, слишком широкая, чтобы пройти.Состояний больше, чем у вас тактов.Путей не осталось.Разорван навсегда.Доказано первым.Уточнена до исчезновения.Ограничен.Слабое местоУкраденоОбогнанБросок!НедетерминизмНедетерминированный поворотНовое: контрпримеры охотятся за трассойПризрачный проходОбрезаноОбрезатьЗапасная трассаДелитель частотыПризрачный проходБот-садовникДлинный прыжокМагнитБюджет решателяБиблиотека леммПруверТрасса-приманкаОракулСвидетельИнвариантКонтрольная точкаНаграда за покрытиеЛинзаБыстрый прыжокУпорствоКонтрольная точка: бюджет восстановленБыстрые поворотыГлубокая границаМелкая границаШтормовой якорьМолот доказательстваСплочениеШирокая обрезкаБыстрая обрезкаСчастливые рядыЕщё одна жизнь.Трасса бежит медленнее.Прыжок несёт дальше.Ближние утверждения тянутся в вашу полосу.Ещё пять секунд бюджета.Щит, сохраняемый между границами.Одно падение прощается за границу.Обрезка расчищает полосу впереди.Прувер, собирающий утверждения впереди.Приманка через две полосы давит жуков.Оракул замедляет время при опасности.Свидетель позади собирает леммы и покрытие.Собственный щит каждые двадцать секунд.Первый таймаут границы прощается.Точки покрытия стоят вдвое больше.Видеть сквозь недетерминизм.Прыжок перезаряжается быстрее.Комбо переживает падение.Смена полосы быстрее.Утверждения в полтора раза дороже, но быстрее.Медленнее, но утверждения стоят меньше.Взрывы состояний длятся вдвое меньше.Боссы получают в полтора раза больше урона.Спутники перезагружаются вдвое быстрее.Обрезка расчищает и соседние полосы.Обрезка перезаряжается быстрее.Ряды несут больше утверждений и лемм.Инвариант: щит поднятРешательТрассаОтрядЗолотоеЗолотое утверждение доказано+1 призрачный проходМедленный тактЗапасная трассаКрутые поворотыУдачаСкидка
Агрессоры молотят по строкам банка DRAM и нагревают соседние строки, пока в них не перевернутся биты. Обновите строку, пока она не перегрелась. У вас три обновления, и каждое возвращается через секунду. Продержите банк сорок секунд, чтобы пройти его и открыть магазин.
ОбновленияНа волоскеБанкВремяОсталось переворотовУдержите строки.Коснитесь строки или нажмите её номер, чтобы обновить. Когда обновлений нет, касание ставит строку в очередь. Пробел — массовое обновление.Коснитесь строки, чтобы обновить её. Когда обновлений нет, касание ставит строку в очередь. Массовое обновление — в рамке.Биты перевёрнуты.На волоскеОбновленоБит перевернулся!На волоскеНа волоске в этом банке: {n}+1 исправление ECCМассовое обновлениеНовый агрессор: {name}МолотСпринтерКрабПараСкрытный молотПрыгает наугадБыстрые прыжки, лёгкие ударыХодит от строки к строке, бьёт сильноБьёт по одной строке с обеих сторонПрячется после каждого прыжкаВентиляторКанарейкаЧасовойОн остужает самую горячую строкуОна поёт, когда строка греется, и склёвывает с молотов маскировкуМолоты, приземлившиеся рядом с ним, отскакивают{name} присоединяется к банкуБанк растёт: +{n} строкДалее: {name} · {s} сБольше строкЗолотая строкаЧирик!ОтскочилПерезарядкаОбновлений не осталосьВ очереди {n}Убрана из очередиБанк {n} из {m} удержанПамять удержана.10 банков, которые нужно удержатьБанк {n} из {m}Новое: двусторонняя атакаНовое: жар достаёт до строк через однуНовое: агрессоры прячутся после прыжкаИсправлено ECCБот TRR обновил строкуКороль Молотов изгнанПресс выселенФантом выселенТепловой скачокВолна охлаждения: жетоны восполненыПросадка напряжения: обновление стоит два жетонаОчистка ECC: +1 исправлениеПерекартирование: две строки поменялись местамиЗолотая строка: держите её холоднойЗолотая строка осталась холоднойЗолотая строка потерянаКороль МолотовПрессФантомБьёт сильнее всехТри строки за разВиден, только когда бьётКаждая строка — моя, чтобы бить.Зачем бить по одной строке, если можно по трём.Обнови то, чего не видишь.Свергнут.Расплющен.Стал видимым.Под щитомСразу после приземления он открыт: тогда обновите соседнюю строкуПосле каждого удара он отдыхает: тогда обновите строку под нимОн показывается, когда бьёт: тогда обновите соседнюю строкуПроход ботаЛишний жетонБыстрая зарядкаECCТурбоимпульсЗапасной банкБот TRRДатчикОхладительСкрабберДлинная очередьФорсированный режимБронированные строкиТеплозащитаРадиаторыЗащита от просадкиГорячие рукиОглушающий молотМедленное горениеГлубокий холодМощь радиаторовРаннее предупреждениеЗолотой нюхБыстрая уборкаДвойная уборкаТормоз для боссовОграничение скоростиЦепочка обновленийЕщё один жетон.Жетоны возвращаются быстрее.Ещё один перевёрнутый бит поглощается за банк.Всплеск перезаряжается быстрее.Ещё одна жизнь.Бот TRR охлаждает самую горячую строку.Видно, куда молоты прыгнут дальше.Строки греются на десять процентов медленнее.Заряд ECC каждые пятнадцать секунд.В очереди до пяти строк.Всплеск замораживает молоты на две секунды.Слабые строки терпят чуть больше жара.Тепловые всплески вдвое слабее.Радиатор уже установлен.Просадка больше не удваивает цену.Быстрые жетоны, но строки греются чуть быстрее.Обновление под молотом оглушает его.Строки греются медленнее, но и жетоны возвращаются медленнее.Обновление охлаждает соседей вдвое сильнее.Радиаторы режут жар до трети.Строки предупреждают раньше.Золотые строки стоят вдвое больше.Бот убирает чаще.Бот охлаждает ещё одну строку за уборку.Боссы прыгают медленнее.Молоты прыгают медленнее.Быстрые подряд обновления дают больше.КонтроллерПамятьБотыРадиатор установленХолодные рукиТолстые стеныЗапасной предохранительБыстрый импульсСкидка
Счёт0
Найдено багов0
Комбо×1
Чип1
Жизни3
Время0:40
Рекорд0
УровеньУр. 1
На паузе
Дерево умений
Счёт
Новый рекорд!Кампания пройдена{name} приближаетсяВпереди: {name}{name} после этой волны{name} в яростиСтадия {n}: {name}Стадия {n} из 3{name}: уровень {n}Коснитесь, чтобы пропуститьЗакрытоМаксимумНужно: {name}Коснитесь звена, чтобы посмотреть. Дорожки загораются по мере покупок.Уровень {n} из {m}Вместо {name}Полпути позадиОсталось значений: {n}Осталось утверждений: {n}Вас остановил босс {name}. {hint}Продолжить · {level}Начать зановоИгра продолженаРекорд: уровень {n} из {m} · побеждено боссов: {b}Игра {n} из 4 · {name}Да, это игра. Нажмите «Играть», объясню по ходу.Четыре игры, по одной на тему. Начните с этой.Баги, заражение, доказательства и DRAM. Выберите вкладку и нажмите «Играть».Потратьте очки ниже, затем нажмите «Продолжить» · {n}Выберите один бонус, чтобы продолжить · {n}Дальше всегоХорошая серияВ удареНе остановить{n} очк.Очки: {n}{n} очк.Ур. {n}Новый уровень!Уровень {n}Выберите перкПотратить очки с умом значит хорошо профаззить.Рецензент 2 считает, что с обвязкой всё в порядке. Рецензент 2 ошибается.Здесь всё прошло рецензирование. Мной.Возврату не подлежит. Тейп-аут окончателен.Отличный выбор. Наверное.Продано. Эррату не читайте.Это мой любимый. И тот тоже.Приятно иметь с вами дело. Осторожно, кусается.Чип всё равно выпустили. Их всегда выпускают.Это был контрпример. Пишите статью.Баги случаются. Спросите любую эррату.Кремний не прощает ошибок. Кофе помогает.Повышение. Бумаги уже у вас на столе.Новый уровень. Постоянной ставки всё ещё нет.Уже сильнее. Выбирайте с умом.СтажёрАспирантПостдокПрофессорПочётный профессорРанг в лаборатории: {rank} · {xp} XP · игр за 5-м уровнем: {n}/4Открыто: {name}Грант на фаззингТрекер-напарникДоказательство охлажденияШоколадная трассаСекрет открытКоснитесь большого чипа вверху страницы семь разШоколадный режимШоколадный режим выключенЧип дня · {date}Названо в честьАркадаИграйте на сайте ChocoLab, NUS Computing