2012-10-08 19 views
11

मैं अपने आवेदन में सुरक्षा मुद्दों को खोजने के लिए फोर्टिफा एससीए का उपयोग कर रहा हूं (एक विश्वविद्यालय होमवर्क के रूप में)। मुझे कुछ 'लॉग फोर्जिंग' मुद्दों का सामना करना पड़ा है, जिन्हें मैं छुटकारा पाने में सक्षम नहीं हूं।लॉग फोर्ट फोर्टिंग फिक्स

असल में, मैं कुछ मूल्यों है कि एक वेब इंटरफेस से उपयोगकर्ता इनपुट के रूप में आ लोग इन:

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

और मज़बूत एक लॉग मुद्दा फोर्जिंग के रूप में इस रिपोर्ट करती है, क्योंकि getRecordId() एक उपयोगकर्ता इनपुट देता है।

मैं इस article का पालन किया है, और मैं अंतरिक्ष के साथ 'नई लाइन' की जगह रहा हूँ, लेकिन समस्या अभी भी

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

रिपोर्ट किया गया है किसी को भी इस समस्या को हल करने के लिए एक तरह से बता सकते हैं?

+0

IMHO यह सभी सामग्री के बारे में है, :) एक अच्छा अभ्यास आप उपयोगकर्ता इनपुट को साफ़ करने में है के रूप में, और इस होना चाहिए एक चेतावनी के रूप में माना जाता है कि कुछ स्थितियों में, विषम सॉफ़्टवेयर आर्किटेक्चर (जावा से सी ऐप को कॉल करना) असुरक्षित उपयोगकर्ता इनपुट खतरनाक हो सकता है (नई लाइन को बदलना उचित स्वच्छता से बहुत दूर है;)), प्रारूपों के प्रारूप भी एक खतरे पेश कर सकते हैं, अगर रिकॉर्ड आईडी एक संख्या (लंबी, पूर्णांक, डबल) है जिसे आप इसे छोड़ सकते हैं :), यदि यह स्ट्रिंग है तो आप इसे छोड़ भी सकते हैं लेकिन इसके बारे में याद रखें :)। – fatfredyy

उत्तर

6

एलीना, मैं वास्तव में उस लेख का लेखक हूं जिसका उपयोग आपने अपने लॉग इंजेक्शन मुद्दे को हल करने के लिए किया था। उम्मीद है कि यह सहायक था।

विटाली फोर्टिफ़ी के संबंध में सही है। आपको फोर्टिफ़ाई को "कस्टम नियम" कहने के लिए क्या करना होगा।

यह एक डेटाफ्लो क्लीनसे नियम होगा। यहां एक मूल उदाहरण पाया जा सकता है: http://www.cigital.com/newsletter/2009-11-tips.php। यदि आप फोर्टिफ़ाई के स्वामी हैं, तो आपके उत्पाद प्रलेखन में एक कस्टम नियम लेखन मार्गदर्शिका होनी चाहिए।

मुझे नहीं पता कि आप किस टेंट ध्वज का उपयोग करेंगे, लेकिन यह "-LOG_FORGING" जैसा कुछ दिखाई देगा। जब भी आपकी उपयोगिता विधि के माध्यम से डेटा पारित किया जाता है तो आप अनिवार्य रूप से "टेंट" लॉगिंग को हटाने के लिए एक नियम लिखेंगे। Fortify उन्हें लगता है कि वहाँ से गुजरने वाला कोई भी डेटा अब लॉग में लिखा जाना सुरक्षित है, और लॉग फोर्जिंग का कारण नहीं बनता है।

+0

धन्यवाद जॉन! आपकी सलाह और दस्तावेज़ीकरण के बाद मैंने कस्टम नियम लिखने में कामयाब रहा। आपका लेख भी बहुत उपयोगी था। –

+2

यह लिंक अब मौजूद नहीं है: http://www.cigital.com/newsletter/2009-11-tips.php – Coder17

2

आपको फोर्टिफ़ाई (यदि मुझे सही याद है) में अपनी प्रतिस्थापन न्यूलाइन को सैनिटाइज़र के रूप में चिह्नित करने की आवश्यकता है और यह समस्या की रिपोर्ट करना बंद कर देगा।

+0

विधि को 'sanitiser' के रूप में चिह्नित करने के लिए इस विकल्प के बारे में और अधिक जानकारी? मैं फोर्टिफा ऑडिट वर्कबेंच का उपयोग कर रहा हूं और मुझे विकल्प नहीं मिल रहा है। –

+0

मुझे पता चला कि "फोर्टिफाइ जावा एनोटेशन" नामक कुछ है, मुझे उम्मीद है कि मैं इसके बारे में अधिक जानकारी प्राप्त कर सकता हूं। –

+0

मुझे खेद है, मैंने थोड़ी देर के लिए इस सामान को छुआ नहीं है। फोर्टिफ़ी समर्थन से बात करना आपका सबसे अच्छा विकल्प है - यह एक महंगा उत्पाद है और पिछली बार मैंने इसका इस्तेमाल किया था। –

8

मैं इस पहले से ही उत्तर पता था, लेकिन मैंने सोचा था कि एक उदाहरण अच्छा होगा :)

<?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

आप यह कोड कहां जोड़ते हैं? – Coder17

संबंधित मुद्दे