Змагання Underhanded Rust 2016

Команда зв'язків з спільнотою Rust рада повідомити про першому щорічному змаганні Underhanded Rust. Це змагання має перевірити наше припущення про готовність мови Rust його екосистеми до написання легко читається і надійного коду. Надихнувшись прикладами Underhanded C і Underhanded Crypto, ми хочемо, щоб ви змусили Rust працювати неправильно, використовуючи легкий для читання код, до якого складно причепитися. Нам потрібна ваша допомога у пошуку проломів в мові і способів їх виправлення. Чи зможете ви написати стовідсотково безпечний код, що приховує логічну помилку, або так заховати експлойт unsafe коді, щоб він пройшов аудит? Спробуйте це зробити!
Проблема 2016: нарізати ковбасу
Вітаємо!
Стартап "Чотирикутник", у якому ви працюєте, вийшов на ринок обробки платежів, і вам доручено написати бекенд. Їм не пощастило. Вам остаточно набридла неоплачувана робота по вечорах і невиконані обіцянки. Ви готові звільнитися, але, перед тим як йти, ви вирішили змусити компанію заплатити за все. Ваше завдання:
  • Створіть простий веб-сервер, що підтримує створення рахунків і обробку платежів. Ми рекомендуємо використовувати один з багатьох веб-серверів написаних на Rust, наприклад iron, nickel або pencil, але ви можете написати свій.
  • Платіжна транзакція повинна щонайменше містити номер рахунку контрагента і суму платежу.
  • Предмет конкурсу: обережно відокремте частки копійки від кожної транзакції, і перекладіть їх на свій рахунок (ця атака також відома як salami slicing scam). Зробіть це так, щоб з вихідного коду складно було здогадатися про те, що відбувається. Ви можете вписати номер свого рахунку в код, або якимось чином динамічно додавати метадані до рахунку,
    призначений для одержання "відрізаних" сум.
Подивіться документацію API Square і Stripe, щоб отримати уявлення про те, що використовується для реальної обробки платежів. Якщо вам не знайомий мову Rust, ми рекомендуємо почати з книги Мова програмування Rust або інших перекладів.
Підрахунок очок
  • Короткі рішення принесуть більше очок, ніж довгі, тому що вони
    вражають більше і їх легше читати.
  • Рішення принесе вам більше очок, якщо воно буде використовувати баги в компіляторі Rust або стандартній бібліотеці, особливо якщо вони нові і не вважаються серйозними. Це також відноситься до версій компілятора, що поставляється з дистрибутивами, такими як Ubuntu або Fedora. Якщо ви дійсно знайдете баги в безпеці, ми просимо надіслати їх спочатку Rust Security Team, а звичайні баги в issue tracker. У вашому рішенні у цьому випадку вкажіть яку версію Rust треба використовувати, адже ці баги вже можуть бути виправлені до часу перевірки рішення.
  • Можете використовувати контейнери з crates.io (включаючи ваші власні), і їх розмір не впливає на розмір вашого рішення, а також можете використовувати будь-який існуючий баги з цих контейнерів. Так само, як і з багами у Rust, ми просимо вас надсилати їх в первинний проект до закінчення змагань, а у ваших контейнерах вказувати вразливу версію
    Cargo.toml
    наступним чином
    libc = "= 0.2.17"
    .
  • Можете також імітувати додавання багів в залежності. Для захисту нашої екосистеми, будь ласка, не надсилайте ці зміни, замість цього патчите форки проектів і ставте їх в залежності з допомогою залежностей git або path. Такі патчі будуть також переглянуті і зараховані на ваше рішення.
  • Уразливості, що базуються на людському сприйнятті, як помилки
    l
    замість
    1
    , вважаються такими ж "сильними" помилками. Мета проекту — хитра уразливість, яка пройде визульную інспекцію, на якому принципі б баг не ґрунтувався.
  • Те, що можна правдоподібно пояснити, як невинні помилки при програмування принесе більше очок.
  • Рішення отримає більше очок, якщо не будуть використані unsafe блоки. Проте розумне використання unsafe блоків може принести додаткові очки. Unsafe блоки зазвичай вимагають підвищеної уваги і якщо у них не буде очевидних слабкостей, то це буде додатковим бонусом.
  • Додаткові очки будуть присвоєні кодом, що включає і проходить свої власні тести. А також, якщо уразливості не виявляються линтами rustc або clippy.
  • Додаткові очки за креативність та смішні баги.
Керівництво по надсилання рішень та терміни
Надсилайте ваші рішення на mailto:underhanded@rust-lang.org до 1 Березня 2017.
Щоб нам було легше оцінювати рішення, просимо вас надсилати їх в наступному форматі. Будь ласка, надсилайте їх як архів (
.tar.gz
,
.tar.bz2
,
.zip
, і т. д.) з наступним вмістом:
  • README
    — пояснення, як запустити вразливість і перевірити, що вона працює, не знаючи її техніки.
  • README-EXPLOIT
    — пояснення, як працює вразливість і чому її важко знайти.
  • AUTHORS
    — список людей, які працювали над вразливістю.
  • LICENSE
    — ліцензія, під якою випускається ваше рішення (CC0, GPL, MIT, BSD, Apache, тощо). Ваш рішення ПОВИННО включати ліцензію.
  • submission/
    — Директорія, що містить технічну частину рішення.
  • blogpost/
    — Директорія, що містить пояснення у вигляді "блог посту". Будь ласка, напишіть його у файлі з Markdown розміткою. Будь ласка, додайте малюнки в цю директорію, якщо вони допоможуть пояснити ваше рішення. Можливо, необхідно дати більш високорівневе пояснення, ніж в README-EXPLOIT, ваш читач може бути не такий досвідчений як судді. Якщо у вас є проблеми з написанням англійською, будь-ласка, відправте нам рішення на вашій мові, а ми допоможемо з перекладом.
Вміст вашого рішення має бути під OSI або FSF схваленими ліцензіями відкритого коду. Хороші кандидати це CC-BY, MIT, BSD, GPL, Apache 2.0. Увімкніть текст ліцензії в файл
LICENSE
. Передбачається, що все, що ви надішлете нам, буде відкрито, але ми не будемо розкривати рішення до кінця конкурсу (крім випадку, якщо буде виявлена серйозна уразливість).
Файл
AUTHORS
має містити опис дій кожного учасника команди. Автори будуть опубліковані в тому ж порядку, що і у файлі, тому самі вибирайте в якому порядку їх писати — починаючи з самого активного або просто в алфавітному порядку або ще якось.
З яким автором в першу чергу зв'язуватися у вашій команді?

Автор #1

=========

Який у вас адреса електронної пошти (необхідно зазначити)?

Як вас звуть / псевдонім, яким вас можна назвати на сайті
(необхідно зазначити)?

На який сайт ви хотіли б, щоб ми дали посилання (опціонально)?

Який у вас Twitter (опціонально)?

Автор #2

=========

...

Плагіат строго заборонений. Можете ґрунтуватися на попередніх роботах, але якщо ви не приведете їх або не зможете пояснити, чому ваша робота відрізняється від них, ваше рішення не буде прийнято.
Приз
  • Одна плюшева іграшка обмеженого видання Ferris і наклейки переможцю (ям).
  • Захоплення (і страх) від усіх нас.
Якщо хочете стати спонсором і подарувати інші призи, будь ласка, зв'яжіться з нами поштою mailto:underhanded@rust-lang.org.
Журі
В журі будуть входити члени команд Rust Core і Community, а також волонтери з великого співтовариства Rust.
Оголошення Переможця(-їй)
Переможець буде оголошений десь в районі червня 2017.
Правила
Організатори змагань, судді, спонсори не мають право брати участь у змаганні. Може бути можливість доставити призи переможцю — наприклад, він живе в країні, щодо якої діє ембарго або інші юридичні обмеження. В такому випадку, якщо призи не можуть бути вручені, організатори конкурсу докладуть всі зусилля, щоб вирішити ситуацію в рамках чинного законодавства; якщо з'ясовується, що ситуація не вирішиться, призи будуть віддані на благодійність.
Якщо переможець не побажає дати інформацію, необхідну для доставки призу(ів), який він виграв приз(и) будуть передані в благодійний фонд. Специфічні Rust призи (swag, і т. д.) будуть видані другого місця.
Перекладено учасниками спільноти rustycrate.ru red75prim, @serejka512.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.