<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Code Security</title><link>https://www.dotnetzone.gr:443/cs/forums/139/ShowForum.aspx</link><description>Περιοχή που συζητάμε για το το code security - ένα θέμα που πρέπει να απασχολεί κάθε προγραμματιστή.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59779.aspx</link><pubDate>Fri, 27 Aug 2010 21:50:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59779</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59779.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59779</wfw:commentRss><description>Σωστό αυτό, μάλιστα είναι και αυτό που έχουν πει από την πρώτη στιγμή: Το /GS είναι ένα πρώτο γρήγορο μέτρο προστασίας για char buffer overruns, όχι μία ολοκληρωμένη αντιμετώπιση των buffer overruns. Άσε που, επίσης από την αρχή, λένε ότι δεν πρέπει να βασίζεται κανείς σε αυτό αλλά να χρησιμοποιεί σωστή μεθοδολογία. Δεν είναι τυχαίο που το λένε "canary trap" και όχι "αντιασφυξιογόνο μάσκα".</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59778.aspx</link><pubDate>Fri, 27 Aug 2010 21:14:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59778</guid><dc:creator>PALLADIN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59778.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59778</wfw:commentRss><description>&lt;div&gt;Εκτος από το μέγεθος του buffer, μια ενδιαφέρουσα λεπτομέρεια είναι to "where each element of the buffer is either one or two bytes".&lt;/div&gt;&lt;div&gt;Νομίζω ότι φαίνεται ξεκάθαρα ότι κάνουν target μονο char/wchar buffers (και οχι int[], long[]&amp;nbsp;&lt;span class="Apple-style-span" style="font-size:13.3102px;"&gt;ktlp&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size:13.3102px;"&gt;) και αυτό αντικατοπτρίζει το &lt;b&gt;στατιστικό &lt;/b&gt;γεγονός ότι οι&lt;/span&gt;&lt;/div&gt;&lt;div&gt;περισσότεροι προγραμματιστές τα χρησιμοποιούν με αντίστοιχα "&lt;b&gt;επικίνδυνα&lt;/b&gt;" functions (strcpy, memcpy ktlp)&lt;/div&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59776.aspx</link><pubDate>Fri, 27 Aug 2010 20:59:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59776</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59776.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59776</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Το θέμα είναι, οι δικοί σου προβληματισμοί λύθηκαν? Γιατί θεωρούν ότι τα μικρά buffer είναι χαμηλού κινδύνου? Καθώς και γιατί υπάρχουν συμβιβασμοί ? Εγώ δεν είχα καμμία αμφιβολλία ότι ένα απλό προστατευτικό μέτρο όπως το /GS θα έχει πολλούς περιορισμούς και συμβιβασμούς υπέρ της ταχύτητας.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;&lt;br&gt;Χμ, σωστή ερώτηση.&lt;br&gt;Οι συμβιβασμοί λόγω performance είναι κατανοητοί, αν και εγώ θα ήθελα να μπορούσα να έχω την επιλογή να αναλάβω το "κόστος" του perfomance penalty για οποιαδήποτε function ή buffer όσο μικρό κι αν είναι. &lt;br&gt;Αυτό που έγινε clear σε εμένα είναι οτι οι μηχανικοί της MS δεν προσπάθησαν να εξαλείψουν το πρόβλημα αλλά προσπάθησαν να ελαχιστοποιήσουν την πιθανότητα εμφάνισης του, με βάση κάποιους&amp;nbsp; κανόνες που ισχύουν και ακολουθούνται στα περσσότερα προγράμματα από τους περισσότερους προγραμματιστές, επηρεάζοντας επίσης όσο το δυνατόν λιγότερο το performance.&lt;br&gt;Κατά συνέπεια, την έκφραση "&lt;font&gt;Small buffers are 
unlikely to be the target of an attack&lt;/font&gt;..." &lt;u&gt;δεν&lt;/u&gt; την ερμηνεύω οτι στα μικρά buffers έχουμε μικρή δυνατότητα να κάνουμε κάτι κακό αλλά οτι: &lt;br&gt;Τα μικρά buffers έχουν μικρή πιθανότητα να χρησιμοποιηθούν σε πολύ μεγάλα προγράμματα. Ή αλλιώς, τα μικρά buffers έχουν μικρή συχνότητα εμφάνισης σε μεγάλα προγράματα. Τόσο μικρή που δεν αξίζει τον κόπο να δημιουργούν την __cooklie__ variable (με όλα τα συναφή) σε σχέση με αυτό που θα κερδίσουμε...&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59773.aspx</link><pubDate>Fri, 27 Aug 2010 18:36:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59773</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59773.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59773</wfw:commentRss><description>Το θέμα είναι, οι δικοί σου προβληματισμοί λύθηκαν? Γιατί θεωρούν ότι τα μικρά buffer είναι χαμηλού κινδύνου? Καθώς και γιατί υπάρχουν συμβιβασμοί ? Εγώ δεν είχα καμμία αμφιβολλία ότι ένα απλό προστατευτικό μέτρο όπως το /GS θα έχει πολλούς περιορισμούς και συμβιβασμούς υπέρ της ταχύτητας.</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59772.aspx</link><pubDate>Fri, 27 Aug 2010 16:56:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59772</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59772.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59772</wfw:commentRss><description>Το άρθρο του "πολύ" Aleph είναι λιγάκι ξεπερασμένο. Σου προτείνω μάλιστα την &lt;a href="http://www.phrack.org/issues.html?issue=49&amp;amp;id=14#article"&gt;original&lt;/a&gt; δημοσίευση στο phrack η οποία έγινε 1996.Αν και ήταν ο πρώτος που σύνδεσε όλα αυτά σε ένα κείμενο, δεν ήταν ο πρώτος που ανακάλυψε το buffer overflow το οποίο "έπαιζε" από τα μέσα του '70. Τεσπα... φιλοσοφούμε τώρα - ntax δεν είναι + κακό! &lt;br&gt;Βέβαια το &lt;a href="http://mariano-graziano.llab.it/docs/report.pdf"&gt;Smashing The Stack in 2010&lt;/a&gt; ή το &lt;a href="http://www.ethicalhacker.net/content/view/122/2/"&gt;Smashing The Modern Stack For Fun And Profit&lt;/a&gt; και πάρα πολλά άλλα είναι λίγο πιο... σύχγρονα.&lt;br&gt;&lt;br&gt;Πάντως για να λυθούν οι περισσότεροι προβληματισμοί σου (όπως το πως θα αντιμετωπίσεις το τυχαίο starting address τόσο του προγράμματος σου όσο και των βασικών DLLs του λειτουργικού - kernel32 etc) σου προτείνω το &lt;a class="title" href="http://www.amazon.com/Shellcoders-Handbook-Discovering-Exploiting-Security/dp/047008023X/ref=sr_1_2?s=books&amp;amp;ie=UTF8&amp;amp;qid=1282890264&amp;amp;sr=1-2"&gt;The
 Shellcoder's Handbook: Discovering and Exploiting Security Holes&lt;/a&gt;. Λύνει αρκετές απορίες σε θέματα που πολλοί θεωρούν "σχεδόν αδύνατο" να υλοποιηθούν.&lt;br&gt;&lt;br&gt;Επίσης, έχεις κάνει μια παραδοχή για το σκεπτικό μου που δεν είναι απόλυτα σωστή: Χρησιμοποιώντας την RET address μπορεί να *μην* θέλω να κάνω redirection σε άλλο πρόγραμμα, δικό μου ούτε σε κάποιο shellcode δωσμένο από command line (που λέει ο λόγος). Μπορεί να θέλω να κάνω απλά ένα jump σε μια address το ίδιου του προγράμματος που τρέχει για να ξεπεράσω (ας πούμε) ένα έλεγχο για serial number. Θα μου πεις τώρα "αυτό μπορείς να το κάνεις με ένα patch του executable". Σωστό κι αυτό! Αλλά δεν είναι κακό να λέμε όλες τις... εναλλακτικές.&lt;br&gt;&lt;br&gt;Υπάρχουν πολλά ακόμα. Κάθε πράμα, όμως, στον καιρό του.&lt;br&gt;Έτσι κι αλλιώς το θέμα δεν είναι το "Αν" αλλά το "&lt;a href="http://www.technewsworld.com/story/Pentagon-Yep-We-Got-Hacked-70699.html"&gt;Πότε&lt;/a&gt;"... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59768.aspx</link><pubDate>Fri, 27 Aug 2010 01:16:49 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59768</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59768.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59768</wfw:commentRss><description>Καλά, αυτό που γράφει ο Γιώργος το έχουμε πει ήδη εδώ και 4 posts! Μάλλον θα πρέπει να αναρωτηθείς "γιατί θεωρείται ότι οι μικροί buffer δεν είναι και τόσο επιρρεπείς σε επίθεση?"&amp;nbsp;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Η πλάκα είναι ότι έδωσες την απάντηση με την αρχική σου ερώτηση, όταν μίλησες για Shellcode. Στο "&lt;a href="http://insecure.org/stf/smashstack.html"&gt;Smashing the stack for fun and profit&lt;/a&gt;" αναφέρει, πέρα από το πως να χρησιμοποιήσεις ένα buffer overflow για να προσθέσεις shell code, και τους λόγους που αυτό είναι δύσκολο για μικρά buffers:&lt;/div&gt;&lt;div&gt;"&lt;i&gt;There will be times when the buffer you are trying to overflow is so small that either the shellcode wont fit into it, and it will overwrite the return address with instructions instead of the address of our code, or the number of NOPs you can pad the front of the string with is so small that the chances of guessing their address is minuscule. &lt;/i&gt;".&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Πιο απλά, ακόμα κι αν πειράξεις το return address, αυτό πρέπει να δείχνει στο δικό σου assembly code και όχι σε κάποια άσχετη θέση μνήμης. Πρέπει να ξέρεις αυτή τη απόλυτη διεύθυνση, η οποία θα αλλάζει σε κάθε εκτέλεση του κώδικα, για να μπορέσεις να την γράψεις πάνω από το κανονικό return address. Το μόνο "σίγουρο" address που έχεις όμως σημείο είναι το ίδιο το buffer, οπότε θα πρέπει να υπολογίσεις τη θέση του κώδικα σου σε σχέση με την αρχή του buffer. Αυτό όμως σημαίνει ότι πρέπει να υπολογίσεις ακριβώς το μέγεθος του κώδικα σου σε bytes ΚΑΙ την τελική του θέση μέσα στο stack, κάτι σχεδόν αδύνατο και τόσο εύκολο. Γι αυτό βάζεις και κάμποσα NOP πριν τον κώδικα σου, έτσι ώστε να μεγαλώσει ο αριθμός των return address που μπορείς να χρησιμοποιήσεις.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Το πρόβλημα τώρα είναι ότι αν το assembly σου είναι πολύ μεγάλο θα γράψει όχι μόνο πάνω από το return address αλλά και πάνω από διευθύνσεις που δεν έχουν γίνει allocate ακόμα στο πρόγραμμα σου. Αποτέλεσμα: crash. Αν το buffer είναι αρκετά μεγάλο όλος ο κώδικας σου θα χωρέσει μέσα στον χώρο που του έχει ήδη ανατεθεί στο stack. Αν όμως είναι πολύ μικρός, ο κώδικας σου σχεδόν σίγουρα θα ξεφύγει από το buffer και μπορεί να διαγράψει και άλλα, άσχετα πράγματα.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Συνεπώς, είναι πολύ δυσκολότερο να υπολογίσεις το σωστό return address όταν χρησιμοποιείς μικρά buffers.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Άσε που ο compiler αλλάζει τυχαία τη σειρά των παραμέτρων στο stack, με αποτέλεσμα συνήθως να μην ξέρεις ΠΟΥ ακριβώς θα πρέπει να γράψεις το return address.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59767.aspx</link><pubDate>Fri, 27 Aug 2010 00:38:40 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59767</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59767.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59767</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;George J. Capnias:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;...&lt;font&gt;Small buffers are unlikely to be the target of an attack,...&lt;/font&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;Αυτό, πράγματι είναι μια εξήγηση... πιθανοθεωρητική (ή για άλλους αρκετά "απλοποιημένη") προσέγγιση βέβαια, αλλά είναι μια εξήγηση που μαζί με την "αρχή της ισσοροπίας" που πολύ σωστά (κατά τη γνώμη μου) τόνισε ο Palladin αιτιολογεί σε ένα βαθμό την αρχική ερώτηση.&lt;br&gt;&lt;br&gt;Thnx 4 your time gentlemen!&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59765.aspx</link><pubDate>Thu, 26 Aug 2010 23:38:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59765</guid><dc:creator>PALLADIN</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59765.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59765</wfw:commentRss><description>&lt;div&gt;Καλησπέρα σε όλους.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Η φιλοσοφία της C/C++ συνοψίζεται ως:&lt;/div&gt;&lt;div&gt;δύναμη και εμπιστοσύνη στον προγραμματιστή.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Πλέον είναι σαφές ότι αυτό δεν μπορεί να συνεχιστεί ...&lt;/div&gt;&lt;div&gt;οποτε αφού πρέπει να ζήσουμε με όλον αυτόν τον κώδικα,&lt;/div&gt;&lt;div&gt;&amp;nbsp;θα πρέπει να βρούμε κάποιες ισορροπίες.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Η ισορροπία έρχεται ακριβώς από την μελέτη του προγραμματιστή και την καταγραφή των λαθών του (heuristics).&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Συνήθως όταν δηλώνει έναν buffer με 4 elements δεν&amp;nbsp;&lt;span class="Apple-style-span" style="font-size:13.3102px;"&gt;χρησιμοποιεί άλλον buffer με iteration για να τον γεμίσει... οποτε αφού και το κόστος του check ισορροπεί την κατάσταση, τότε ας το αφήσουμε έξω.&lt;/span&gt;&lt;/div&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59764.aspx</link><pubDate>Thu, 26 Aug 2010 23:03:17 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59764</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59764.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59764</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/aa290051.aspx#vctchcompilersecuritychecksindepthanchor8"&gt;http://msdn.microsoft.com/en-us/library/aa290051.aspx#vctchcompilersecuritychecksindepthanchor8&lt;/A&gt;&lt;/P&gt;
&lt;BLOCKQUOTE style="MARGIN-RIGHT:0px;" dir=ltr&gt;
&lt;H2 class=dtH2&gt;&lt;A name=vctchcompilersecuritychecksindepthanchor8&gt;&lt;/A&gt;&lt;FONT size=3&gt;Performance Impact&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;A performance tradeoff for using security checks in an application must be made. The Visual C++ compiler team focused on making the performance degradation small. In most cases, the performance should not degrade more than 2 percent. In fact, experience has shown that most applications, including high-performance server applications, have not noticed any performance impact.&lt;/P&gt;
&lt;P&gt;The most important factor behind keeping the performance impact from being an issue is that only functions that are vulnerable to attack are targeted. &lt;FONT style="BACKGROUND-COLOR:#ffff00;"&gt;Currently, the definition of a vulnerable function is one that allocates a type of string buffer on the stack. A string buffer that is considered vulnerable allocates more than four bytes of storage and where each element of the buffer is either one or two bytes. Small buffers are unlikely to be the target of an attack, and limiting the number of functions that have security checks limits the code growth&lt;/FONT&gt;. Most executables will not even notice an increase in size when building with &lt;B&gt;/GS&lt;/B&gt;.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&amp;nbsp;&lt;/P&gt;
&lt;P dir=ltr&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59762.aspx</link><pubDate>Thu, 26 Aug 2010 22:25:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59762</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59762.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59762</wfw:commentRss><description>Μάλλον δεν καταλαβαινόμαστε...&lt;br&gt;Δεν με αφορά (αυτή τη στιγμή) το disassembly (άσε που το dump δίνει επίσης opcodes αν θες που πολλοί αρέσκονται σε αυτά, αφού τα έχουν συνηθίσει!!), άσε που είναι και off-topic. Τι να το κάνω αν δω τον assembly κώδικα (inlined&amp;nbsp; ή μη, debuged ή released)? Και να τον δω (που το έχω κάνει δλδ - ουκ ολίγες)... so what?&lt;br&gt;θα δω πάλι τι κάνει ο compiler.... που το έχω δει. Το ερώτημα είναι αν έχει καμιά εξήγηση κάποιος στο &lt;u&gt;&lt;b&gt;Why&lt;/b&gt;&lt;/u&gt;?&lt;br&gt;Είμαι σίγουρος οτι πολλοί εδώ έχουν πιο πολλά να πουν από το "&lt;i&gt;Πήγαινε ρώτα αυτούς που το έγραψαν...&lt;/i&gt;". Σηζήτηση είπαμε να κάνουμε και όχι να καταδικάσουμε τον compiler.... (λέμε τώρα!)&lt;br&gt;&lt;br&gt;Χμ..., καλά...&lt;br&gt;&lt;br&gt;Αν παρ' ελπίδα κάποιος έχει ασχοληθεί με το θέμα και μπορεί να δώσει την άποψη του γιατί συμβαίνει αυτό, θα ήταν ενδιαφέρουσα η συνεισφορά του.&lt;br&gt;Μια... επι της ουσίας&amp;nbsp; απάντηση είναι πάντα πιο χρήσιμη.&lt;br&gt;&lt;br&gt;thnx&lt;br&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59760.aspx</link><pubDate>Thu, 26 Aug 2010 21:19:42 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59760</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59760.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59760</wfw:commentRss><description>&lt;div&gt;Σέ όλα σου τα post ως τώρα αναφέρεις ότι αυτή η συμπεριφορά εμφανίζεται στα Windows 7 και στα Vista, ενώ δεν έχει καμμία σημασία το λειτουργικό.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;Αν θέλεις να μάθεις γιατί τα μικρά buffer θεωρούνται χαμηλού ρίσκου θα πρέπει να ρωτήσεις τους ανθρώπους που το έγραψαν αυτό στα blogs. Όσο για το τί εντολές δημιουργεί &amp;nbsp;ο compiler, μπορείς να το δεις με ένα disassembler ή από το του &amp;nbsp;debugger, όχι από το dumpbin. Τέλος, έχει σημασία αν κάνεις debug ή release compile. Μόνο το debug compile εξασφαλίζει ότι δεν θα γίνει κανένα optimization ή rewriting. Αν κάνεις compile τον κώδικα σου σε release mode θα δεις ότι το function vulnerable γίνεται Inlined μέσα στη main, οπότε δεν δημιουργείται καν call γι αυτό.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Όσον αφορά το μέγεθος, δεν αφορά το μέγεθος του binary αλλά της μνήμης που χρησιμοποιεί το πρόγραμμα, τόσο ως μέγεθος όσο και ως allocations. Το cookie ουσιαστικά διπλασιάζει τη μνήμη που χρησιμοποιείται στο stack για μεταβλητές μεγέθους 4 bytes. Χονδρικά, μικρά buffers βρίσκεις σε μικρά functions τα οποία χρησιμοποιούνται πολύ συχνά. Το συνολικό κόστος του cookie σε αυτή την περίπτωση μπορεί να αποδειχθεί σημαντικό.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Έτσι κι αλλιώς μιλάμε για tradeoffs. Για να είναι χρήσιμο το GS πρέπει να έχει μικρή επίδαση στο performance τόσο της εφαρμογής όσο και του compilation, αλλιώς θα το απενεργοποιούσαν όλοι. Η χρήση εκτεταμμένης ανάλυσης θα αύξανε σημαντικά το χρόνο compilation και θα ήταν εντελώς απαράδεκτη για ένα feature το οποίο παρέχει βασική ασφάλεια. Για τη δουλειά αυτή υπάρχουν άλλα εργαλεία (static και dynamic analyzers).&amp;nbsp;&lt;/div&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59753.aspx</link><pubDate>Thu, 26 Aug 2010 17:52:18 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59753</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59753.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59753</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Καταρχήν, να λύσουμε μία παρανόηση. Το GS δεν έχει καμμία σχέση με την έκδοση του λειτουργικού.&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;Παναγιώτη δεν καταλαβαίνω πως μπορεί κάποιος να θεωρήσει (διαβάζοντας τα παραπάνω) πως το /GS εξαρτάται το λειτουργικό...&lt;br&gt;Οι αναφορές στο λειτουργικό (κατά την δική μου οπτική γωνία, πάντα) ήταν και ξεκάθαρες και προφανείς. &lt;br&gt;Αν νόμισες οτι εννούσα αυτό, τότε μάλλον δεν έχω εκφράσει κάτι καλά...&lt;br&gt;Ας τα πάρουμε τα πράματα λοιπόν από την αρχή:&lt;br&gt;&lt;br&gt;Έχω τα παρακάτω πρόγραμματα:&lt;br&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;hr width="100%"&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;#include &lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"stdio.h"&lt;/span&gt;&lt;br&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; vulnerable(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;char&lt;/span&gt; *input){&lt;br&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;   char&lt;/span&gt; foo[&lt;font color="#ff0000"&gt;&lt;b&gt;4&lt;/b&gt;&lt;/font&gt;];&lt;br&gt;   strcpy(foo, input);&lt;br&gt;}&lt;br&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;int&lt;/span&gt; main(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;int&lt;/span&gt; argc, &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;char&lt;/span&gt;* argv[])&lt;br&gt;{&lt;br&gt;   vulnerable(argv[1]);&lt;br&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;   return&lt;/span&gt; 0;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/pre&gt;&lt;hr width="100%"&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;/span&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;#include &lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"stdio.h"&lt;/span&gt;&lt;br&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; vulnerable(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;char&lt;/span&gt; *input){&lt;br&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;   char&lt;/span&gt; foo[&lt;font color="#ff0000"&gt;&lt;b&gt;12&lt;/b&gt;&lt;/font&gt;];&lt;br&gt;   strcpy(foo, input);&lt;br&gt;}&lt;br&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;int&lt;/span&gt; main(&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;int&lt;/span&gt; argc, &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;char&lt;/span&gt;* argv[])&lt;br&gt;{&lt;br&gt;   vulnerable(argv[1]);&lt;br&gt;&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;   return&lt;/span&gt; 0;&lt;br&gt;}&lt;br&gt;&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;u&gt;&lt;b&gt;Περίπτωση 1: Buffer 4 bytes και Compilation με /GS αλλά και /Od (disable optimizations)&lt;/b&gt;&lt;/u&gt; &lt;br&gt;&lt;br&gt;&lt;font color="#0000ff" face="Courier New"&gt;&lt;font size="2"&gt;&lt;b&gt;C:\Work&amp;gt;cl testGS.c /GS /Od&lt;/b&gt;&lt;br&gt;Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86&lt;br&gt;Copyright (C) Microsoft Corporation.&amp;nbsp; All rights reserved.&lt;br&gt;&lt;br&gt;testGS.c&lt;br&gt;Microsoft (R) Incremental Linker Version 9.00.21022.08&lt;br&gt;Copyright (C) Microsoft Corporation.&amp;nbsp; All rights reserved.&lt;br&gt;&lt;br&gt;/out:testGS.exe&lt;br&gt;testGS.obj&lt;br&gt;&lt;br&gt;&lt;b&gt;C:\Work&amp;gt;dumpbin testGS.obj /symbols&lt;/b&gt;&lt;br&gt;Microsoft (R) COFF/PE Dumper Version 9.00.21022.08&lt;br&gt;Copyright (C) Microsoft Corporation.&amp;nbsp; All rights reserved.&lt;br&gt;&lt;br&gt;&lt;br&gt;Dump of file testGS.obj&lt;br&gt;&lt;br&gt;File Type: COFF OBJECT&lt;br&gt;&lt;br&gt;COFF SYMBOL TABLE&lt;br&gt;000 0083521E ABS&amp;nbsp;&amp;nbsp;&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | @comp.id&lt;br&gt;001 00000001 ABS&amp;nbsp;&amp;nbsp;&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | @feat.00&lt;br&gt;002 00000000 SECT1&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | .drectve&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Section length&amp;nbsp;&amp;nbsp; 2F, #relocs&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, #linenums&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, checksum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br&gt;004 00000000 SECT2&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | .debug$S&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Section length&amp;nbsp;&amp;nbsp; 64, #relocs&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, #linenums&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, checksum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br&gt;006 00000000 SECT3&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | .text&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Section length&amp;nbsp;&amp;nbsp; 36, #relocs&amp;nbsp;&amp;nbsp;&amp;nbsp; 2, #linenums&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, checksum C9620A42&lt;br&gt;008 00000000 SECT3&amp;nbsp; notype ()&amp;nbsp;&amp;nbsp;&amp;nbsp; External&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _vulnerable&lt;br&gt;009 00000000 UNDEF&amp;nbsp; notype ()&amp;nbsp;&amp;nbsp;&amp;nbsp; External&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _strcpy&lt;br&gt;00A 00000020 SECT3&amp;nbsp; notype ()&amp;nbsp;&amp;nbsp;&amp;nbsp; External&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _main&lt;br&gt;&lt;br&gt;String Table Size = 0x10 bytes&lt;br&gt;&lt;br&gt;&amp;nbsp; Summary&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 64 .debug$S&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2F .drectve&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 36 .text&lt;br&gt;&lt;br&gt;&lt;b&gt;C:\Work&amp;gt;dir testGS.*&lt;/b&gt;&lt;br&gt;&amp;nbsp;Volume in drive C has no label.&lt;br&gt;&amp;nbsp;Volume Serial Number is 3058-A226&lt;br&gt;&lt;br&gt;&amp;nbsp;Directory of C:\Work&lt;br&gt;&lt;br&gt;26/08/2010&amp;nbsp; 10:03 πμ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 162 testGS.c&lt;br&gt;26/08/2010&amp;nbsp; 10:15 πμ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;&lt;b&gt;37,376&lt;/b&gt;&lt;/font&gt; testGS.exe&lt;br&gt;26/08/2010&amp;nbsp; 10:15 πμ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;font color="#ff0000"&gt;575&lt;/font&gt;&lt;/b&gt; testGS.obj&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 File(s)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 38,113 bytes&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;b&gt;Περίπτωση 2: Buffer 12 bytes και Compilation με /GS αλλά και /Od 
(disable optimizations)&lt;/b&gt;&lt;/u&gt; &lt;br&gt;&lt;font color="#0000ff" face="Courier New" size="2"&gt;&lt;br&gt;&lt;b&gt;C:\Work2&amp;gt;cl testGS.c /GS /Od&lt;/b&gt;&lt;br&gt;Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86&lt;br&gt;Copyright (C) Microsoft Corporation.&amp;nbsp; All rights reserved.&lt;br&gt;&lt;br&gt;testGS.c&lt;br&gt;Microsoft (R) Incremental Linker Version 9.00.21022.08&lt;br&gt;Copyright (C) Microsoft Corporation.&amp;nbsp; All rights reserved.&lt;br&gt;&lt;br&gt;/out:testGS.exe&lt;br&gt;testGS.obj&lt;br&gt;&lt;br&gt;&lt;b&gt;C:\Work2&amp;gt;dumpbin testGS.obj /symbols&lt;/b&gt;&lt;br&gt;Microsoft (R) COFF/PE Dumper Version 9.00.21022.08&lt;br&gt;Copyright (C) Microsoft Corporation.&amp;nbsp; All rights reserved.&lt;br&gt;&lt;br&gt;&lt;br&gt;Dump of file testGS.obj&lt;br&gt;&lt;br&gt;File Type: COFF OBJECT&lt;br&gt;&lt;br&gt;COFF SYMBOL TABLE&lt;br&gt;000 0083521E ABS&amp;nbsp;&amp;nbsp;&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | @comp.id&lt;br&gt;001 00000001 ABS&amp;nbsp;&amp;nbsp;&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | @feat.00&lt;br&gt;002 00000000 SECT1&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | .drectve&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Section length&amp;nbsp;&amp;nbsp; 2F, #relocs&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, #linenums&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, checksum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br&gt;004 00000000 SECT2&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | .debug$S&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Section length&amp;nbsp;&amp;nbsp; 64, #relocs&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, #linenums&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, checksum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br&gt;006 00000000 SECT3&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Static&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | .text&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Section length&amp;nbsp;&amp;nbsp; 46, #relocs&amp;nbsp;&amp;nbsp;&amp;nbsp; 4, #linenums&amp;nbsp;&amp;nbsp;&amp;nbsp; 0, checksum A78D99CF&lt;br&gt;008 00000000 SECT3&amp;nbsp; notype ()&amp;nbsp;&amp;nbsp;&amp;nbsp; External&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _vulnerable&lt;br&gt;009 00000000 UNDEF&amp;nbsp; notype ()&amp;nbsp;&amp;nbsp;&amp;nbsp; External&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _strcpy&lt;br&gt;&lt;font color="#ff0000"&gt;00A 00000000 UNDEF&amp;nbsp; notype&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; External&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | ___security_cookie&lt;br&gt;00B 00000000 UNDEF&amp;nbsp; notype ()&amp;nbsp;&amp;nbsp;&amp;nbsp; External&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | @__security_check_cookie@4&lt;br&gt;&lt;/font&gt;00C 00000030 SECT3&amp;nbsp; notype ()&amp;nbsp;&amp;nbsp;&amp;nbsp; External&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | _main&lt;br&gt;&lt;br&gt;String Table Size = 0x3E bytes&lt;br&gt;&lt;br&gt;&amp;nbsp; Summary&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 64 .debug$S&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2F .drectve&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 46 .text&lt;br&gt;&lt;br&gt;&lt;b&gt;C:\Work2&amp;gt;dir testGS.*&lt;/b&gt;&lt;br&gt;&amp;nbsp;Volume in drive C has no label.&lt;br&gt;&amp;nbsp;Volume Serial Number is 3058-A226&lt;br&gt;&lt;br&gt;&amp;nbsp;Directory of C:\Work2&lt;br&gt;&lt;br&gt;26/08/2010&amp;nbsp; 10:10 πμ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 163 testGS.c&lt;br&gt;26/08/2010&amp;nbsp; 10:17 πμ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#ff0000"&gt;&lt;b&gt;37,376&lt;/b&gt;&lt;/font&gt; testGS.exe&lt;br&gt;26/08/2010&amp;nbsp; 10:17 πμ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;font color="#ff0000"&gt;693&lt;/font&gt;&lt;/b&gt; testGS.obj&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 File(s)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 38,232 bytes&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;To binary αρχείο (obj) έχει διαφορετικό μέγεθος αλλά όχι το executable. Αυτό είναι καθαρά feature - το αναφέρω απλά ως επισήμανση. Το dumpbin δείχνει καθαρά την διαφορά και μάλιστα χωρίς καθόλου optimization (/Od). &lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;Δεν είναι ότι "κάτι παίζει και φοβούνται να το 
χαλάσουνε". Απλά τα διάφορα optimizations του compiler μπορούν ακόμα και
 να εξαφανίσουνε buffers μικρότερους από 4 bytes, δηλαδή ... μικρότερα 
από ένα WORD. Ο compiler μπορεί άνετα να χρησιμοποιήσει κάποιο register 
αντί για το stack για να αποθηκεύσει τον buffer και έτσι να μη 
χρησιμοποιήσει καθόλου. &lt;/span&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'Segoe UI',Verdana,Arial;"&gt;&lt;/span&gt;Αν τώρα, ακόμα και με το /Od ο compiler παίρνει την πρωτοβουλία να κάνει τα... δικά του, αντικαθιστώντας το stack με ένα register, OK!... είναι εξίσου ενοχλητικό (για μένα).&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Παναγιώτης Καναβός:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Προφανώς πρέπει να γίνουν κάποιοι συμβιβασμοί από τον compiler στο πού και πότε μπορεί να χρησιμοποιηθεί.&amp;nbsp;&amp;nbsp;Αυτό εξηγείται ήδη από το 2002, στην &lt;a href="http://msdn.microsoft.com/en-us/library/aa290051%28VS.71%29.aspx"&gt;περιγραφή του GS&lt;/a&gt;. "&lt;span class="Apple-style-span" style="font-family:'Segoe UI',Verdana,Arial;"&gt;&lt;i&gt;The most important factor behind keeping the performance impact from being an issue is that&lt;b&gt; only functions that are vulnerable to attack are targeted...&lt;/b&gt; &lt;br&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;Νομίζω οτι η &lt;i&gt;function &lt;b&gt;vulnerable&lt;/b&gt;&lt;/i&gt; στο παράδειγμα μας με τα 4 bytes (που μάλιστα κάνει και χρήση της &lt;i&gt;strcpy&lt;/i&gt;) είναι το... definition του vulnerability.&amp;nbsp;&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-5.gif" alt="Wink" /&gt; &lt;br&gt;&lt;br&gt;Επίσης, ΤΗΧ για τις υπόλοιπες πληροφορίες κάποιες από αυτές δεν τις είχα διαβάσει, οι οποίες όμως δεν λύνουν την δική μου απορία βάση της οποίας έβαλα αυτό το post. Απλά περιγράφουν ΤΙ κάνει ο compiler και όχι &lt;i&gt;Γιατι το κάνει&lt;/i&gt;, ή καλύτερα &lt;i&gt;Γιατι δεν το κάνει&lt;/i&gt;...&lt;br&gt;&lt;span class="Apple-style-span" style="font-family:'Segoe UI',Verdana,Arial;"&gt;&lt;i&gt;&lt;br&gt;&lt;/i&gt;&lt;/span&gt;&lt;br&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59743.aspx</link><pubDate>Thu, 26 Aug 2010 00:31:33 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59743</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59743.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59743</wfw:commentRss><description>&lt;div&gt;Καταρχήν, να λύσουμε μία παρανόηση. Το GS δεν έχει καμμία σχέση με την έκδοση του λειτουργικού. Έχει να κάνει με την έκδοση του compiler που χρησιμοποιήθηκε για να φτιαχτεί ένα binary. Δεύτερον, η χρήση του GS αυξάνει τόσο το μέγεθος του κώδικα όσο και το χρόνο εκτέλεσης. Προφανώς πρέπει να γίνουν κάποιοι συμβιβασμοί από τον compiler στο πού και πότε μπορεί να χρησιμοποιηθεί.&amp;nbsp;&amp;nbsp;Αυτό εξηγείται ήδη από το 2002, στην &lt;a href="http://msdn.microsoft.com/en-us/library/aa290051(VS.71).aspx"&gt;περιγραφή του GS&lt;/a&gt;. "&lt;span class="Apple-style-span" style="font-family:'Segoe UI', Verdana, Arial;"&gt;&lt;i&gt;The most important factor behind keeping the performance impact from being an issue is that&lt;b&gt; only functions that are vulnerable to attack are targeted.&lt;/b&gt; Currently, the definition of a vulnerable function is one that allocates a type of string buffer on the stack. A string buffer that is considered vulnerable allocates more than four bytes of storage and where each element of the buffer is either one or two bytes. &lt;b&gt;Small buffers are unlikely to be the target of an attack&lt;/b&gt;, and limiting the number of functions that have security checks limits the code growth. Most executables will not even notice an increase in size when building with /GS&lt;/i&gt;."&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'Segoe UI', Verdana, Arial;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'Segoe UI', Verdana, Arial;"&gt;Δεν είναι ότι "κάτι παίζει και φοβούνται να το χαλάσουνε". Απλά τα διάφορα optimizations του compiler μπορούν ακόμα και να εξαφανίσουνε buffers μικρότερους από 4 bytes, δηλαδή ... μικρότερα από ένα WORD. Ο compiler μπορεί άνετα να χρησιμοποιήσει κάποιο register αντί για το stack για να αποθηκεύσει τον buffer και έτσι να μη χρησιμοποιήσει καθόλου.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'Segoe UI', Verdana, Arial;"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family:'Segoe UI', Verdana, Arial;"&gt;Όσον αφορά τα περί undocumented συμπεριφοράς, πρόκειται μάλλον για κακή περιγραφή του τί θεωρούσανε vulnerable buffers το 2002. Ή μάλλον, θεωρούσαν ότι δεν χρειάζεται να βάλλουν τους κανόνες αυτούς στην περιγραφή του /GS switch. Έτσι κι αλλιώς, το user guide του compiler δεν είναι και το καταλληλότερο σημείο να περιγράψεις πως δουλεύει εσωτερικά, ούτε ενδιαφέρει τους χρήστες του compiler. Αν πας όμως, π.χ. στο Security Research and Defense blog, όπου συζητάνε πως δουλεύουν τα διάφορα features όπως το GS, θα βρεις και posts που περιγράφουν τα heuristics που χρησιμοποιούνται, π.χ. &lt;a href="http://blogs.technet.com/b/srd/archive/2009/03/16/gs-cookie-protection-effectiveness-and-limitations.aspx"&gt;περιορισμούς&lt;/a&gt;&amp;nbsp;και &lt;a href="http://blogs.technet.com/b/srd/archive/2009/03/20/enhanced-gs-in-visual-studio-2010.aspx"&gt;βελτιώσεις στο Visual Studio 2010&lt;/a&gt;&amp;nbsp;. Δες επίσης και &lt;a href="http://blogs.msdn.com/b/michael_howard/archive/2007/04/03/hardening-stack-based-buffer-overrun-detection-in-vc-2005-sp1.aspx"&gt;αυτό&lt;/a&gt;&amp;nbsp;το post του Michael Howard που περιγράφει το &lt;a href="http://msdn.microsoft.com/en-us/library/bb507721.aspx"&gt;#pragma strict_gs_check&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family:'Segoe UI', Verdana, Arial;"&gt;το οποίο προστέθηκε στο Visual Studio 2005 SP1 για να επιτρέψει τη χρήση των cookies σε όλες τις περιπτώσεις (ακόμα και για buffers μικρότερους από 4 bytes).&lt;/span&gt;&lt;/div&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59738.aspx</link><pubDate>Wed, 25 Aug 2010 19:51:06 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59738</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59738.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59738</wfw:commentRss><description>&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Thiseas:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;BR&gt;&lt;li&gt;Εκτός κι αν αυτό που λεέι η MS είναι μεταγενέστερο της δημοσίευσης της Symentec.&lt;BR&gt;&lt;BR&gt;Το ερώτημα όμως που εχω όμως παραμένει... Γιατί όχι security check στα 4 bytes...? &lt;BR&gt;&lt;BR&gt;Μπορεί να φανεί χαζό αλλά μήπως κάτι "παίζει" στην περίπτωση &amp;lt;=4 bytes και φοβούνται μην το χαλάσουνε... μην χάσουνε κάποιο backward compatibility ή κάτι τέτοιο...?&lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Είναι σημαντικό να ξέρουμε τη χρονική σειρά - γιατί είναι πολυ πιθανό να έχει γίνει fix, και στο fix να περιγράφει και το γιατί και το πως υπάρχει η συμπεριφορά...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;&lt;/li&gt;</description></item><item><title>Απ: Win 7 Stack protection feature...?</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/59736.aspx</link><pubDate>Wed, 25 Aug 2010 18:37:36 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:59736</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/59736.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=139&amp;PostID=59736</wfw:commentRss><description>&lt;br&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;George J. Capnias:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;

&lt;p&gt;Έχεις το σχετικό link μέσα στην Symantec που οδηγεί στο άρθρο;&lt;/p&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;
&lt;p&gt;&lt;b&gt;[EDITED]&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Κάτι βρήκα.... πρέπει να βγήκε μέσα στο 2007... Το παραπάνω paper της Symantec αναφέρεται σε &lt;a href="http://hoagland.org/presentations/CanSecWest07-Vista-Ntw-Attack-Surface.pdf"&gt;αυτό&lt;/a&gt; το link το οποίο συνοψίζει τα ευρήματα του τμήματος Advanced Research Group της ίδιας εταιρίας.&lt;br&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;[/EDITED]&lt;/b&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;George J. Capnias:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Μου κάνει εντύπωση, ότι στο paper, μιλάνε μόνο για Visual Studio 2003-Visual Studio 2005, ενώ για ανάπτυξη σε Vista προτείνεται Visual Studio 2008... &lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/p&gt;&lt;p&gt;Προσωπικά το δοκίμασα με VS 2008 σε windows 7 Ultimate 64bit και παρουσιάζει την ίδια συμπεριφορά. Παρήγαγα 2 executables με /GS το ένα με μια function με δηλωμένο ένα char array of 4 και το αλλο με 12. Μετά σύγκρινα (με την χρηση του &lt;i&gt;dumpbin /ALL&lt;/i&gt;) τα δύο εκτλέσιμα. Φαίνεται καθαρά οτι οτι ένα χρησιμοποιεί το __cookie__Var και το άλλο όχι.&lt;/p&gt;&lt;p&gt;Η microsoft πάντως (σε αντίθεση από αυτό που ισχυρίζεται το παραπάνω κείμενο - οτι είναι undocumented*) το αναφέρει &lt;a href="http://msdn.microsoft.com/en-us/library/8dbf701c.aspx"&gt;εδώ&lt;/a&gt;. Συνοπτικά λέει:&lt;/p&gt;&lt;p&gt;&lt;i&gt;A buffer overrun security check is performed on a &lt;span class="parameter"&gt;GS buffer&lt;/span&gt;. A GS buffer can be one of these:&lt;/i&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;i&gt;An
 array that is larger than 4 bytes, has more than two elements, and has 
an element type that is not a pointer type.&lt;/i&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;i&gt;A data 
structure whose size is more than 8 bytes and contains no pointers.&lt;/i&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;i&gt;A
 buffer allocated by using the &lt;a href="http://msdn.microsoft.com/en-us/library/wb1s57t5.aspx"&gt;_alloca&lt;/a&gt;
 function.&lt;/i&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;i&gt;Any class or structure that contains a GS 
buffer.&lt;/i&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&lt;li&gt;Εκτός κι αν αυτό που λεέι η MS είναι μεταγενέστερο της δημοσίευσης της Symentec.&lt;br&gt;&lt;br&gt;Το ερώτημα όμως που εχω όμως παραμένει... Γιατί όχι security check στα 4 bytes...? &lt;br&gt;&lt;br&gt;Μπορεί να φανεί χαζό αλλά μήπως κάτι "παίζει" στην περίπτωση &amp;lt;=4 bytes και φοβούνται μην το χαλάσουνε... μην χάσουνε κάποιο backward compatibility ή κάτι τέτοιο...?&lt;br&gt;&lt;/li&gt;</description></item></channel></rss>