Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Przerażający programista, czyli: The Underhanded C Contest
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