2012-10-08 23 views
11

Używam Fortify SCA, aby znaleźć problemy bezpieczeństwa w mojej aplikacji (jako zadanie domowe uniwersytetu). Napotkałem kilka problemów związanych z "Kuciem kłód", których nie jestem w stanie się pozbyć.log forging fortyfikacja fix

Zasadniczo Loguję pewne wartości, które przychodzą jak wprowadzanych przez użytkownika za pomocą interfejsu WWW:

logger.warn("current id not valid - " + bean.getRecordId())); 

i wzmacnia to jak donosi dziennik kucia problem, ponieważ getRecordId() powraca wejście użytkownika.

Śledzę ten article i jestem zastępując nową linię „” z miejsca, ale problem jest nadal zgłaszane

logger.warn("current id not valid - " + Util.replaceNewLine(bean.getRecordId())); 

Czy ktoś może zaproponować sposób na rozwiązanie tego problemu?

+0

IMHO to wszystko o treści :) za dobrą praktykę trzeba zdezynfekować wprowadzania danych przez użytkownika, a to powinno być traktowane jako ostrzeżenie, że w pewnych sytuacjach, takich jak heterogeniczne architektury oprogramowania (wywoływanie aplikacji C z JAVA), niesanitaryzowane dane wejściowe użytkownika mogą być niebezpieczne (zastąpienie nowej linii dalece nie jest właściwą sanityzacją;)), również ataki formatów mogą stanowić zagrożenie, jeśli rekord ID to liczba (Long, Integer, Double), którą możesz pominąć :), jeśli jest to ciąg, możesz go pominąć, ale pamiętaj o tym :). – fatfredyy

Odpowiedz

6

Alina, w rzeczywistości jestem autorem artykułu, którego użyłeś do rozwiązania problemu z wtryskiem dziennika. Mam nadzieję, że to było pomocne.

Witalij jest poprawny w odniesieniu do Fortify. Będziesz musiał zbudować to, co Fortify nazywa "regułą niestandardową".

Prawdopodobnie będzie to zasada oczyszczania danych. Podstawowy przykład można znaleźć tutaj: http://www.cigital.com/newsletter/2009-11-tips.php. Jeśli posiadasz Fortify, w dokumentacji Twojego produktu powinien znajdować się przewodnik dotyczący tworzenia niestandardowych reguł.

Nie wiem, jaka flaga będzie używana, ale będzie wyglądać jak "-LOG_FORGING". Zasadniczo zapiszesz regułę, aby usunąć "skażenie" dziennika za każdym razem, gdy dane są przekazywane przez twoją metodę użytkową. Fortyfikacja zakłada, że ​​wszelkie przekazywane przez nią dane są teraz bezpieczne do zapisania w dzienniku i nie powodują fałszowania logów.

+0

Dzięki John! Zgodnie z twoją radą i dokumentacją udało mi się napisać regułę niestandardową, której potrzebuję. Twój artykuł był również bardzo przydatny. –

+2

ten link już nie istnieje: http://www.cigital.com/newsletter/2009-11-tips.php – Coder17

2

Musisz oznaczyć swój replaceNewLine jako środek odkażający w Fortify (jeśli dobrze pamiętam) i przestanie zgłaszać problem.

+0

Dowolne szczegóły dotyczące tej opcji, aby oznaczyć tę metodę jako "środek odkażający"? Używam programu Fortify Audit Workbench i nie mogę znaleźć tej opcji. –

+0

Dowiedziałem się, że jest coś o nazwie "Wzmocnienie adnotacji Java", mam nadzieję, że uda mi się znaleźć więcej informacji na ten temat. –

+0

Przykro mi, nie dotykałem tego przez jakiś czas. Porozmawiaj z obsługą Fortify to najlepsza opcja - jest to kosztowny produkt i wsparcie było w porządku, gdy ostatnio go używałem. –

8

Znam ten został już odpowiedział, ale myślałem przykładem byłoby miło :)

<?xml version="1.0" encoding="UTF-8"?> 
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules"> 
    <RulePackID>D82118B1-BBAE-4047-9066-5FC821E16456</RulePackID> 
    <SKU>SKU-Validated-Log-Forging</SKU> 
    <Name><![CDATA[Validated-Log-Forging]]></Name> 
    <Version>1.0</Version> 
    <Description><![CDATA[Validated-Log-Forging]]></Description> 
    <Rules version="3.14"> 
    <RuleDefinitions> 
     <DataflowCleanseRule formatVersion="3.14" language="java"> 
     <RuleID>DDAB5D73-8CF6-45E0-888C-EEEFBEFF2CD5</RuleID> 
     <TaintFlags>+VALIDATED_LOG_FORGING</TaintFlags> 
     <FunctionIdentifier> 
      <NamespaceName> 
      <Pattern/> 
      </NamespaceName> 
      <ClassName> 
      <Pattern>Util</Pattern> 
      </ClassName> 
      <FunctionName> 
      <Pattern>replaceNewLine</Pattern> 
      </FunctionName> 
      <ApplyTo implements="true" overrides="true" extends="true"/> 
     </FunctionIdentifier> 
     <OutArguments>return</OutArguments> 
     </DataflowCleanseRule> 
    </RuleDefinitions> 
    </Rules> 
</RulePack> 
+0

gdzie można dodać ten kod? – Coder17