Co do ostatniego pytania:
A jak przydatne są takie środki i tak, gdy aplikacja używa około 30 bibliotek, które korzystają z żadnej z tych? ;)
PIE jest konieczne tylko dla główny program aby mogły być ładowane w sposób losowy adres. ASLR zawsze działa dla bibliotek współdzielonych, więc korzyści PIE są takie same bez względu na to, czy korzystasz z jednej biblioteki współdzielonej, czy 100.
Ochronnik stosu skorzysta tylko z kodu skompilowanego z ochroną przed stosami, więc używaj go tylko w swoim głównym Program nie pomoże, jeśli twoje biblioteki będą pełne luk.
W każdym razie, zachęcam do tego, aby nie brać pod uwagę tych opcji jako części aplikacji, a zamiast tego stanowić część całej integracji systemu. Jeśli korzystasz z ponad 30 bibliotek (z których większość to śmieciowe, jeśli chodzi o jakość kodu i bezpieczeństwo) w programie, który będzie współpracował z niezaufanymi, potencjalnie szkodliwymi danymi, dobrym pomysłem będzie zbudowanie całego systemu z osłoną stosu i innymi opcjami hartowania zabezpieczającego.
Należy jednak pamiętać, że najwyższe poziomy _FORTIFY_SOURCE
i prawdopodobnie niektóre inne nowe opcje bezpieczeństwa powodują przerwanie ważnych rzeczy, które mogą być wymagane przez prawidłowe i poprawne programy, dlatego też należy przeanalizować, czy można z nich bezpiecznie korzystać. . Jedna znana, niebezpieczna rzecz, którą robi jedna z opcji (zapominam o której) sprawia, że specyfikator %n
dla printf
nie działa, przynajmniej w niektórych przypadkach. Jeśli aplikacja używa %n
, aby uzyskać przesunięcie w wygenerowanym ciągu i musi użyć tego offsetu, aby później go zapisać, a wartość nie zostanie wypełniona, jest to potencjalna luka sama w sobie ...
co to jest ASLR? gdzie możemy znaleźć szczegółowe wyjaśnienie tych flag i ich wpływu na wydajność? – sree