Akademia NIS2/KSC2 od sekuraka. 19 października start drugiej edycji!
Zobacz nasz aktualny kalendarz szkoleń!
Akademia NIS2/KSC2 od sekuraka. 19 października start drugiej edycji!
Zobacz nasz aktualny kalendarz szkoleń!
Wyobraź sobie, że jesteś programistą, który pracuje nad projektem serwisu do publikowania oraz przesyłania krótkich wiadomości tekstowych (powiedzmy, że to taka konkurencja dla Twittera). W pewnym momencie firma, dla której pracujesz, dostaje od Rządu zlecenie na wprowadzenie funkcji szpiegujących użytkowników serwisu (sytuacja nie aż tak fantastyczna w obecnych czasach).
Otóż wiadomości, które zawierają pewne kluczowe słowa, powinny zostać zarchiwizowane – wraz z informacjami o autorze – w specjalnym logu. Zaimplementowanie niewdzięcznej funkcjonalności zostaje zlecone Tobie.
Nie zgadzasz się na Globalną Inwigilację…ale z drugiej strony czujesz, że to niepowtarzalna okazja. Skoro funkcja i tak ma powstać (bo Rządowi się przecież nie odmawia), to niech będzie wyposażona w ukrytą funkcję, tak żeby w niejawny sposób informować użytkowników serwisu o fakcie przechwycenia ich wiadomości.
Tak brzmi treść ubiegłorocznego zadania w konkursie niejawnego programowania w C (The Underhanded C Contest), którego wyniki ogłoszono w czerwcu tego roku.
Treści publikowanych co roku wyróżnionych rozwiązań (zadania każdego roku są inne), to kopalnia wiedzy o kruczkach, niuansach i pułapkach programowania w języku C.
Od przekazania funkcji systemowej argumentów w zamienionej kolejności, przez niewinnie wyglądające literówki w kodzie, które skutkują precyzyjnym nadpisaniem wybranych zmiennych (jak rozwiązanie autora niniejszego wpisu podmieniające lokalne wskaźniki dzięki “omyłkowemu” przekopiowaniu części stosu pomiędzy dwoma funkcjami) do wykorzystania mało znanych cech niektórych funkcji systemowych i nietypowych bądź przestarzałych, ale wciąż poprawnych konstrukcji języka.
Zwycięskie w tym roku rozwiązanie wykorzystuje kilka z wymienionych metod jednocześnie i idealnie realizuje cel ukrycia niejawnej funkcjonalności przed audytorem kodu. Jego autor (a konkretnie autorka) został określona mianem “przerażającego” programisty. Czy słusznie ? Przekonajcie się sami.
— Bartol