이미 운영중인 시스템에 적용하기 적당한 SW개발방법론 CLASP활동중심,

역할 기반의 프로세스로 구성된 집합체다.



개념 관점에서는 각 개발 프로세스를 계획하고 평가하는 단계에서, CLASP 프로세스 컴포넌트들의 상호작용과 취약성 관점을 통해서, 어떻게 역할기반 관점에 적용하는지를 기술한다.

역할기반 관점에서는 프로젝트팀의 각 구성원이 24개의 보안과 관련된 CLASP 활동들에 대해 각 역할을 정의한다.

활동평가 관점에서는 CLASP의 보안관련 활동들에 대해서 타당성을 평가할 수 있도록 도와줌으로써, 프로젝트 매니저와 프로세스 엔지니어링 팀의 부담을 덜어주는 것이다.

활동구현 관점에서는 활동 평가단계에서 선택한 24가지 보안관련 CLASP의 활동들을 수행한다.

취약성 관점에서는 애플리케이션 소스코드에서 보안과 관련된 취약성을 5개의 카테고리(범위 및 타입 에러, 환경 문제, 동기화 및 타이밍 에러, 프로토콜 에러, 일반 논리 에러)로 분류하고 각 카테고리별로 해당하는 취약성에 대해서 취약성의 발견시기, 취약성의 결과, 위험평가, 공격을 위한 자원, 회피와 완화방법, 침투 가능성, 영향 받는 프로그래밍 언어와 운영체제 등을 핵심적으로 설명한다.

참고: https://www.owasp.org/index.php/Category:OWASP_CLASP_Project

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

실무적으로 검증된 방법론 중 하나로 보안 강화 기법(build security in)을 지원하는 Seven-Touchpoint



SDLC 내의 개발 단계와 이와 관련된 7 개의 보안 강화 활동을 정의.

o 코드 검토 (code review)

o 아키텍처 위험 분석 (architectural risk analysis)

o 침투 테스트 (penetration testing)

o 위험기반 보안 테스트 (risk-based security tests)

o 악용 사례 (abuse cases)

o 보안 요구 (security requirement)

o 보안 운영 (security operation)

요구사항과 유즈케이스 단계

오용사례와 위험분석을 통해서 보안요구사항에 대한 정의와 명세를 하고, 오용 사례에 대한 정의 및 케이스 예를 작성한다.

구조설계 단계

공격저항 분석(Attack resistance analysis), 모호성 분석, 허점 분석 등을 통해 위험요소를 분석한다


테스트 계획 단계

공격 패턴, 위험 분석 결과, 악용 사례를 기반으로 위험기반 보안테스트를 수행한다.

코드 단계

구현 오류(implementation bug)에 중점을 두며 특히 소스코드에 존재하는 취약성을 발견할 목적으로 수행되는 코드 정적 분석에 중심을 둔다.

테스트, 테스트 결과 단계

위험 분석 및 침투 테스팅을 수행한다침투 시험을 통해 실제 작동 환경에서의 필드 소프트웨어에 대한 좋은 이해를 제공한다.

현장과의 피드백 단계

보안 운영을 통해 얻은 공격자와 공격 도구에 대한 경험과 지식은 개발자에게 다시 피드백  한다

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

암호화 키 관리

2015.05.25 20:29

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

OWASP Mobile Top 10

2015.05.12 00:55

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

PMD Custom Rule

2015.05.11 18:55

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

원본: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html


TIOBE Index for March 2015

March Headline: All time high for F# at position 11

Microsoft's programming language F# is about to sneak into the top 10. It is not clear why F# is gaining popularity. Possible reasons might be the F# web-programming framework WebSharper and the promotional work of the F# Software Foundation as Tomas Petricek (author of "F# Deep Dives") stated in an interview about 2 weeks ago. Another interesting move this month: CoffeeScript enters the top 100 for the first time.

The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. It is important to note that the TIOBE index is not about the best programming language or the language in which most lines of code have been written.

The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TIOBE index can be found here.

Mar 2015Mar 2014ChangeProgramming LanguageRatingsChange
11C16.642%-0.89%
22Java15.580%-0.83%
33Objective-C6.688%-5.45%
44C++6.636%+0.32%
55C#4.923%-0.65%
66PHP3.997%+0.30%
79changeJavaScript3.629%+1.73%
88Python2.614%+0.59%
910changeVisual Basic .NET2.326%+0.46%
10-changeVisual Basic1.949%+1.95%
1112changeF#1.510%+0.29%
1213changePerl1.332%+0.18%
1315changeDelphi/Object Pascal1.154%+0.27%
1411changeTransact-SQL1.149%-0.33%
1521changePascal1.092%+0.41%
1631changeABAP1.080%+0.70%
1719changePL/SQL1.032%+0.32%
1814changeRuby1.030%+0.06%
1920changeMATLAB0.998%+0.31%
2045changeR0.951%+0.72%


Ratings (%)2002200420062008201020122014051015202530Wednesday, Dec 2, 2009● Java: 17.061%TIOBE Programming Community IndexSource: www.tiobe.com
C
Java
Objective-C
C++
C#
PHP
JavaScript
Python
Visual Basic .NET
Visual Basic

Other programming languages

The complete top 50 of programming languages is listed below. This overview is published unofficially, because it could be the case that we missed a language. If you have the impression there is a programming language lacking, please notify us at tpci@tiobe.com. Please also check the overview of all programming languages that we monitor.

PositionProgramming LanguageRatings
21SAS0.936%
22Logo0.876%
23Swift0.816%
24COBOL0.736%
25ML0.699%
26PostScript0.666%
27OpenEdge ABL0.626%
28Assembly0.620%
29Fortran0.607%
30ActionScript0.546%
31D0.504%
32Lisp0.501%
33Scratch0.472%
34Ada0.468%
35Scala0.456%
36Groovy0.413%
37Lua0.409%
38C shell0.402%
39Prolog0.377%
40Max/MSP0.355%
41Scheme0.324%
42RPG (OS/400)0.314%
43Awk0.298%
44PL/I0.283%
45Inform0.272%
46VBScript0.270%
47Go0.261%
48Z shell0.231%
49(Visual) FoxPro0.230%
50LabVIEW0.227%

The Next 50 Programming Languages

The following list of languages denotes #51 to #100. Since the differences are relatively small, the programming languages are only listed (in alphabetical order).

  • 4th Dimension/4D, Alice, Apex, Arc, Automator, Bash, bc, Bourne shell, C-Omega, cg, CL (OS/400), Clean, Clojure, CoffeeScript, cT, Dart, DiBOL, Eiffel, Erlang, Factor, Forth, Hack, Haskell, Icon, IDL, Io, Ioke, J, J#, Korn shell, Ladder Logic, M4, Magic, Mathematica, Moto, NATURAL, NXT-G, OpenCL, Oz, PILOT, PowerShell, Programming Without Coding Technology, Pure Data, Q, S, SPARK, SPSS, Standard ML, Tcl, VHDL


This Month's Changes in the Index

This month the following changes have been made to the definition of the index:

  • There are lots of mails that still need to be processed. As soon as there is more time available your mail will be answered. Please be patient.

Very Long Term History

To see the bigger picture, please find the positions of the top 10 programming languages of many years back. Please note that these are average positions for a period of 12 months.

Programming Language2015201020052000199519901985
C1211211
Java2123---
Objective-C32038----
C++44321212
C#5589---
PHP63426---
Python7662322--
JavaScript8896---
Perl9754914-
Visual Basic .NET10------
Pascal151366133155
Lisp1915138552
Ada30261516663
Fortran312314174311

Programming Language Hall of Fame

The hall of fame listing all "Programming Language of the Year" award winners is shown below. The award is given to the programming language that has the highest rise in ratings in a year. 

YearWinner
2014medal JavaScript
2013medal Transact-SQL
2012medal Objective-C
2011medal Objective-C
2010medal Python
2009medal Go
2008medal C
2007medal Python
2006medal Ruby
2005medal Java
2004medal PHP
2003medal C++


Bugs & Change Requests

This is the top 5 of most requested changes and bugs. If you have any suggestions how to improve the index don't hesitate to send an e-mail to tpci@tiobe.com.

  1. Apart from "<language> programming", also other queries such as "programming with <language>", "<language> development" and "<language> coding" should be tried out.
  2. Add queries for other natural languages (apart from English). The idea is to start with the Chinese search engine Baidu. This has been implemented partially and will be completed the next few months.
  3. Add a list of all search term requests that have been rejected. This is to minimize the number of recurring mails about Rails, JQuery, JSP, etc.
  4. Start a TIOBE index for databases, software configuration management systems and application frameworks.
  5. Some search engines allow to query pages that have been added last year. The TIOBE index should only track those recently added pages.


Frequently Asked Questions (FAQ)

  • Q: Am I allowed to show the TIOBE index in my weblog/presentation/publication?

    A: Yes, the only condition is to refer to its original source "www.tiobe.com".

  • Q: How may I nominate a new language to be added to the TIOBE index?

    A: If a language meets the criteria of being listed (i.e. it is Turing complete and has an own Wikipedia entry that indicates that it concerns a programming language) and it is sufficiently popular (more than 25,000 hits for +"<language> programming" for Google), then please write an e-mail to tpci@tiobe.com.

  • Q: I would like to have the complete data set of the TIOBE index. Is this possible?

    A: We spent a lot of effort to obtain all the data and keep the TIOBE index up to date. In order to compensate a bit for this, we ask a fee of 5,000 US$ for the complete data set. The data set runs from June 2001 till today. It started with 25 languages back in 2001, and now measures more than 150 languages once a month. The data are availabe in comma separated format. Please contactsales@tiobe.com for more information.

  • Q: Why is the maximum taken to calculate the ranking for a grouping, why not the sum?

    A: Well, you can do it either way and both are wrong. If you take the sum, then you get the intersection twice. If you take the max, then you miss the difference. Which one to choose? Suppose somebody comes up with a new search term that is 10% of the original. If you take the max, nothing changes. If you take the sum then the ratings will rise 10%. So taking the sum will be an incentive for some to come up with all kinds of obscure terms for a language. That's why we decided to take the max.

    The proper way to solve this is is of course to take the sum and subtract the intersection. This will give rise to an explosion of extra queries that must be performed. Suppose a language has a grouping of 15 terms, then you have to perform 32,768 queries (all combinations of intersections). So this seems not possible either... If somebody has a solution for this, please let us know.

  • Q: What happened to Java in April 2004? Did you change your methodology?

    A: No, we did not change our methodology at that time. Google changed its methodology. They performed a general sweep action to get rid of all kinds of web sites that had been pushed up. As a consequence, there was a huge drop for languages such as Java and C++. In order to minimize such fluctuations in the future, we added two more search engines (MSN and Yahoo) a few months after this incident.

  • Q: Why is YouTube used as a search engine for the TIOBE index?

    A: First of all, YouTube counts for less than 10% of all ratings, so it has hardly any influence on the index. YouTube has been added as an experiment. It qualified for the TIOBE index because of its high ranking on Alexa. YouTube is a young platform (so an indicator for popularity) and there are quite some lectures, presentations, programming tips and language introductions available on YouTube.


블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

• http://www.aldeid.com

http://www.morningstarsecurity.com

http://www.hackingdna.com

http://zer0byte.com/2013/03/19/kali-linux-complete-tools-list-installation-screen-shots/

http://www.monkey.org/~dugsong/fragroute/

http://www.sans.org/security-resources/idfaq/fragroute.php

http://flylib.com/books/en/3.105.1.82/1/

http://www.darknet.org.uk/2008/04/cdpsnarf-cdp-packet-sniffer/

http://mateslab.weebly.com/dnmap-the-distributed-nmap.html

http://www.tuicool.com/articles/raimMz

http://backtrackwasneversoeasy.blogspot.co.uk/2012/02/terminating-internet-of-whole-network.html

http://www.ethicalhacker.net

http://nmap.org/ncat/guide/ncat-tricks.html

http://nixgeneration.com/~jaime/netdiscover/

http://csabyblog.blogspot.co.uk

http://thehackernews.com

https://code.google.com/p/wol-e/wiki/Help

http://linux.die.net/man/1/xprobe2

http://www.digininja.org/projects/twofi.php

https://code.google.com/p/intrace/wiki/intrace

https://github.com/iSECPartners/sslyze/wiki

http://www.securitytube-tools.net/index.php@title=Braa.html

http://security.radware.com


http://www.kali.org/

http://www.backtrack-linux.org

http://www.question-defense.com

http://www.vulnerabilityassessment.co.uk/torch.htm

http://myexploit.wordpress.com/network-copy-router-config-pl-merge-router-config-pl/

http://www.securitytube.net

http://www.rutschle.net/tech/sslh.shtml

http://althing.cs.dartmouth.edu/local/www.thoughtcrime.org/ie.html

http://www.thoughtcrime.org/software/sslstrip/

http://ucsniff.sourceforge.net/ace.html

http://www.phenoelit.org/irpas/docu.html

http://www.forensicswiki.org/wiki/Tcpflow

http://linux.die.net/man/1/wireshark

http://www.nta-monitor.com/tools-resources/security-tools/ike-scan

http://www.vulnerabilityassessment.co.uk/cge.htm

http://www.yersinia.net

http://www.cqure.net/wp/tools/database/dbpwaudit/

https://code.google.com/p/hexorbase/

http://sqlmap.org/

http://sqlsus.sourceforge.net/

http://www.jammed.com/~jwa/hacks/security/tnscmd/tnscmd-doc.html

http://mazzoo.de/blog/2006/08/25#ohrwurm

http://securitytools.wikidot.com


https://www.owasp.org

http://www.powerfuzzer.com

http://sipsak.org/

http://resources.infosecinstitute.com/intro-to-fuzzing/

http://www.rootkit.nl/files/lynis-documentation.html

http://www.cirt.net/nikto2

http://pentestmonkey.net/tools/audit/unix-privesc-check

http://www.openvas.org

http://blindelephant.sourceforge.net/

http://code.google.com/p/plecost

http://packetstormsecurity.com/files/94305/UA-Tester-User-Agent-Tester-1.03.html

http://portswigger.net/burp/

http://sourceforge.net/projects/websploit/

http://www.edge-security.com/wfuzz.php

https://code.google.com/p/wfuzz

http://xsser.sourceforge.net/

http://www.testingsecurity.com/paros_proxy

http://www.parosproxy.org/

http://www.edge-security.com/proxystrike.php

http://www.hackingarticles.in

http://tipstrickshack.blogspot.co.uk/2012/11/how-to-use-websploit.html

http://cutycapt.sourceforge.net/

http://dirb.sourceforge.net


http://www.skullsecurity.org/

http://deblaze-tool.appspot.com

http://www.securitytube-tools.net/index.php@title=Grabber.html

http://rgaucher.info/beta/grabber/

http://howtohack.poly.edu/wiki/Padding_Oracle_Attack

http://blog.gdssecurity.com/labs/2010/9/14/automated-padding-oracle-attacks-with-padbuster.html

https://code.google.com/p/skipfish/

http://w3af.org/

http://wapiti.sourceforge.net/

http://www.scrt.ch/en/attack/downloads/webshag

http://www.hackingdna.com/2013/01/webshag-on-backtrack-5.html

http://www.digininja.org/projects/cewl.php

http://hashcat.net

https://code.google.com/p/pyrit

http://www.securiteam.com/tools/5JP0I2KFPA.html

http://freecode.com/projects/chntpw

http://whatisgon.wordpress.com/2010/01/28/chntpw-tutorial-resetting-windows-passwords-editing-registry-linux/

http://www.cgsecurity.org/cmospwd.txt

http://adaywithtape.blogspot.co.uk/2011/05/creating-wordlists-with-crunch-v30.html

http://hashcat.net

http://ixplizit.wordpress.com/2012/04/08/hashcat-the-very-basic/

https://code.google.com/p/hash-identifier/

http://www.osix.net/modules/article/?id=455


http://cse.spsu.edu/raustin2/coursefiles/forensics/How_to_use_Volatility_v2.pdf

http://thesprawl.org/projects/pack/#maskgen

http://dev.man-online.org/man1/ophcrack-cli/

http://ophcrack.sourceforge.net/

http://manned.org

http://www.onlinehashcrack.com/how_to_crack_windows_passwords.php

http://project-rainbowcrack.com

http://www.randomstorm.com/rsmangler-security-tool.php

http://pentestn00b.wordpress.com

http://bernardodamele.blogspot.co.uk/2011/12/dump-windows-password-hashes.html

http://manpages.ubuntu.com/manpages/natty/man1/sipcrack.1.html

http://www.leidecker.info/projects/sucrack.shtml

http://santoshdudhade.blogspot.co.uk/2012/12/findmyhash-112-python-script-to-crack.html

http://www.foofus.net/jmk/medusa/medusa.html#how

http://www.irongeek.com/i.php?page=backtrack-r1-man-pages/medusa

http://nmap.org/ncrack/man.html

http://leidecker.info/projects/phrasendrescher.shtml

http://wiki.thc.org/BlueMaho

http://flylib.com/books/en/3.418.1.83/1/

http://www.hackfromacave.com

http://www.pentest.co.uk/downloads.html?cat=downloads&section=01_bluetooth

https://github.com/rezeusor/killerbee

https://code.google.com/p/nfc-tools/source/browse/trunk/mfoc/src/mfoc.c?r=977


http://nfc-tools.org

http://www.binarytides.com/hack-windows-social-engineering-toolkit-java-applet/

http://seclists.org

http://www.openbsd.org/cgi-bin/man.cgi?query=sshd&sektion=8

http://recordmydesktop.sourceforge.net/manpage.php

http://www.truecrypt.org

http://keepnote.org

http://apache.org

https://github.com/simsong/AFFLIBv3

http://www.computersecuritystudent.com/FORENSICS/VOLATILITY

http://csabyblog.blogspot.co.uk/2013/01/backtrack-forensics-volafox.html

http://www.sleuthkit.org/autopsy/desc.php

http://sysforensics.org/2012/02/sleuth-kit-part-2-mmls-and-mmstat.html

http://guymager.sourceforge.net/

http://www.myfixlog.com/fix.php?fid=33

http://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html

http://www.spenneberg.org/chkrootkit-mirror/faq/

http://www.aircrack-ng.org/

https://sites.google.com/site/clickdeathsquad/Home/cds-wpacrack

http://www.willhackforsushi.com

http://www.ciscopress.com

http://openmaniak.com/kismet_platform.php

http://sid.rstack.org/static/


http://www.digininja.org

http://thesprawl.org/projects/dnschef/

http://hackingrelated.wordpress.com

http://r00tsec.blogspot.co.uk/2011/07/hacking-with-evilgrade-on-backtrack5.html

https://github.com/vecna/sniffjoke

http://tcpreplay.synfin.net

http://dallachiesa.com/code/rtpbreak/doc/rtpbreak_en.html

http://tomeko.net/other/sipp/sipp_cheatsheet.php?lang=pl

http://sipp.sourceforge.net/

https://code.google.com/p/sipvicious/wiki/GettingStarted

http://voiphopper.sourceforge.net/

http://ohdae.github.io/Intersect-2.5/#Intro

http://obscuresecurity.blogspot.co.uk/2013/03/powersploit-metasploit-shells.html

http://dev.kryo.se/iodine/wiki/HowtoSetup

http://proxychains.sourceforge.net/

http://man.cx/ptunnel(8)

http://www.sumitgupta.net/pwnat-example/

https://github.com/

http://www.dest-unreach.org/socat/doc/README

https://bechtsoudis.com/webacoo/

http://inundator.sourceforge.net/

http://vinetto.sourceforge.net/

http://www.elithecomputerguy.com/classes/hacking/



블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

(1) 실습화면: openeg 사이트 > 보안코딩 테스트 > 오픈리다이렉트

 

(2) 실습파일: kr.co.openeg.test.controller.TestController.java

 

(3) 취약점 동적진단:

 

    요청URL 값을 변조하여 허용되지 않은 사이트로 요청을 이동하도록 테스트 한다.   

 

(4) 시큐어코딩기법 :  

 

    리다이렉트를 허용할 URL 목록을 하드코딩하여, 사용자의 요청에 따라 지정된 URL을 이용하도록 제약을 준다.





protected void doGet(HttpServletRequest request, HttpServletResponse response)  

     throws ServletException, IOException {

 

    // 다른 페이지 이동하는 URL 리스트를 만든다.

    String allowURL[] = { "http://url1.com", "http://url2.com", "http://url3.com" };

    // 입력받는 url은 미리 정해진 URL order로 받는다.

    String nurl = request.getParameter("nurl");

 

    try {

        Integer n = Integer.parseInt(nurl);

            if ( n >= 0 && n < 3)

                response.sendRedirect(allowURL[n]);

    } catch (NumberFormatException nfe) {

                             //  입력 값이 숫자가 아닐 경우 적절히 에러를 처리한다.

    }

}


블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

사용자로 부터 수신한 작업 요청이 해당 세션의 사용자가 실행권한을 가지고 있는지 체크하여 권한이 있는 사용자로 부터의 요청인 경우에만 작업을 수행할 수 있도록 한다. 예제에서는 delete 작업 요청한 사용자가 로그인 세션의 userid와 동일한자, 해당 동작을 수행할 수 있는 사용자인지를 체크하기 위해 checkAccessControlList 를 구현하고 호출하도록 작성하였다.



@RequestMapping(value="/test/access_control_test.do", method = RequestMethod.POST)

@ResponseBody

public String testAccessControlPost(HttpServletRequest request,HttpServletResponse response){

             StringBuffer buffer=new StringBuffer();

         String name=request.getParameter("name");

             String action=request.getParameter("action");

             if( "view".equals(action)) {

                           buffer.append("==> 사용자 정보조회<br/>");

             }else if( "modify".equals(action)) {

                           aclData[1] = name;

                           buffer.append("==> 사용자 정보수정<br/>");

             }else if ( "delete".equals(action)) {

                 if ( checkAccessControlList(name) ) {

                               aclData[0]="";

                               aclData[1]="";

                               buffer.append("==> 사용자정보삭제<br/>");

                 } else {

                     buffer.append("==> 허용되지 않은 요청입니다.<br/>");

                 }

             }else if ( "edit".equals(action)) {

                           aclData[0]=name;

                           buffer.append("==> 사용자정보생성<br/>");

             }           

                          

                           buffer.append("사용자명: "+aclData[0]+"<br/>");

                           buffer.append("   전화번호: "+aclData[1]);

                           return buffer.toString();

}

 

public boolean checkAccessControlList(String name){

     String[] allowList = {"admin". "manager","root"};

     String userid = request.getSession.getAttribute("userid");

     if ( ! userid.equals(name)) return false;

     for(String allow : allowList ) {

         if ( allow.equals(name)) return true;

     }

     return false;

}




블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹


 


PART 01. 안전한 소프트웨어 개발 방법론


CHAPTER 01. 시큐어코딩 개요


1. 침해사고 유형별 발생빈도가 가장 높은 보안 영역은?

  (3) 애프리케이션 보안


2. [   CWE    ]는 미국 국토안보부에서 관리하고 있으며, 소프트웨어의 취약점을 사전식으로 분류해 프로그래머가 쉽게 접근할 수 있도록 구성되어 있다.

 

3. [    CVE      ]는 시간에 따라 감지된 보안 취약점 또는 위험 노출을 정리한 목록이다. 기본적으로 MITRE를 주축으로 해서 각종 소프트웨어 개발 회사와 CERT/CC 같은 기관에서 감지된 보안 취약점을 보고하면, 조정위원회를 통해 목록이 관리된다.

 

4. 가장 위험한 소프트웨어 에러 25가지에 대한 목록을 제공하는 사이트는?

  (4) SANS

 

5. 2013년에 발표된 OWASP TOP 10 리스트에서 가장 많은 침해 사고가 발생한 취약점은?

  (2) 삽입(Injection)

  

6. 웹 애플리케이션 취약점 중 XSS의 비중이 큰 이유가 아닌 것은?

   (4) 에러 구문으로 정보 노출이 있기 때문이다.

  

7. 입력 값 검증 작업이 제대로 이뤄지지 않아 발생할 수 있는 취약점이 아닌 것은?

   (4) 취약한 비밀번호 허용




CHAPTER 02. 개발보안방법론


1.  [    SW개발보안방법론    ]은 안전한 애플리케이션을 개발, 운영, 유지하기 위해 소프트웨어 개발 라이프사이클(SDLC) 단계별 보안 조치를 적용하는, 보안이 강화된 소프트웨어를 개발하기 위한 방법론이다.

 

2. 소프트웨어 개발 단계별 보안 활동 중 설계 단계에서 수행하는 보안 활동은?

   (2) 위협원 도출

 

3. OWASP CLASP에 관한 설명이 아닌 것은?

   (4) 역할 기반 뷰(Role-bases View)에 따르면 보안 인식 프로그램을 운영하는 것은 보안전문가의 역할이다.

 

4. CLASP가 제공하는 5개의 뷰(View) 중 다음의 설명에 해당하는 뷰는?

애플리케이션 소스 코드에서 발생할 수 있는 보안 취약점들을 5개의 카테고리, 104개의 타입으로 정리하고 있다.

   (4) 취약점 뷰

 

5. Microsoft- SDL에 따라 도출된 위협에 대한 위험도 계산에 사용되는 항목이 아닌 것은?

   (3) 자산 피해                               

 

6. Microsoft -SDL에 따라 도출된 서비스 거부 위협에 따른 대응 기술로 적절하지 않은 것은?

   (4) 타임스탬프

 

7. 위협에 대응하는 방법 중 다음의 설명에 해당하는 대응 방법은?

문제점을 무시하고 아무런 대응도 하지 않는다. 불가피한 사유로 아무런 대응도 하지 않기로 결정했다면 위협에 관련된 기능을 기본적으로 비활성화 상태로 설치할 수 있는지 고려해야 한다.

   (4) 문제점을 무시한다.

 

8. Microsoft -SDL의 위협 모델링에서 위협 분류 타입이 아닌 것은?

   (4) 발견 용이성

 

9. Microsoft-SDL의 위협 모델링의 2단계에서 수행되는 애플리케이션 분해에서 수행하는 작업은?

(1) 분석하려는 시스템의 신뢰 구성요소와 비신뢰 구성요소의 경계를 구분한다.


10. Microsoft-SDL에서 위협 모델링의 목표는?

(1) 소프트웨어에서 발생 가능한 위협들을 모두 추출한다.



PART 02. 안전한 소프트웨어를 만드는 시큐어코딩 기법


CHAPTER 03. 웹 애플리케이션 보안을 위한 기본지식


1. 8비트 이진 데이터를 문자 코드에 영향받지 않는 공통 ASCII 영역의 문자들로만 이뤄진 일련의 문자열로 바꾸는 인코딩 방식은?

  (4) BASE64 인코딩

 

2. 브라우저에서 웹 서버로 안전하게 문자열 데이터를 전달하기 위해 사용되는 인코딩 방식은?

   (2) URL 인코딩


3. 웹 서버에서 브라우저로 안전한 문자열 데이터를 전달하기 위해 사용되는 인코딩 방식은?

   (1) HTML 인코딩                                  

 

4. XSS 취약점 제거를 위해 출력 시 활용하는 인코딩 방식은

   (2) HTML인코딩   

 

5. 다음의 정규식 설명 중 바르지 않은 것은?

   (4) ([a-z]+):(\1) abc:1에 매칭되는 정규식이다.

 

6. 다음 정규식 중 IP 주소가 바르게 입력되었는지 필터링하기 위해 사용될 수 있는 패턴은?

   (4) ([0-9]{1,3}) '. ([0-9]{1,3}) '. ([0-9]{1,3}) '. ([0-9]{1,3})

 

7. 주어진 정규식은 어떤 값을 필터링할 때 사용할 수 있나

^'d{2,3} - 'd{3,4} - 'd{4}$

  (2) 전화번호



CHAPTER 04. 보안 취약점 제거를 위한 코딩 기법


1. 다음 예제 코드에서 발생 가능한 보안 취약점은?

<select id="selectMember" parameterType="String" resultType=Member">  

      SELECT * FROM Member WHERE NAME = '${name}'

</select>

   (3) SQL 삽입(Injection)                  

 

2. 다음 중 SQL 삽입 공격을 예방하기 위해 검증해야 할 값이 아닌 것은?

  (4) 서버에서 생성, 저장된 세션 ID  

 

3. 에러 기반의 SQL 삽입 공격에 취약하지 않은 사이트를 구축하기 위한 조치로 적절하지 않은 것은?

  (2) 입력 값에 대해 < > & ; 같은 문자를 제거하는 코드를 작성한다.

 

4. 다음 예제 코드에서 발생 가능한 보안 취약점은?

String data=request.getParameter("data"); 

cmd = new String[] { "cmd.exe","/c",data };

Runtime.getRuntime().exec(cmd);

   (3) 명령어 삽입(Command Injection)              

 

5. 명령어 삽입 취약점을 제거하기 위한 보안 코딩 기법은?

   (1) 입력 값에서 ; &을 제거한다.


6. 다음 중 XPath 취약점의 존재 여부 확인에 사용되는 입력 값으로 적합한 것은?  

   (4) ' or 1=1 또는 ' or ''='

 

7. 세션 관리 취약으로 발생될 수 있는 보안 취약점이 아닌 것은?

   (4) 세션 ID 재설정

 

8. XSS 취약점의 보안 대책이 아닌 것은

   (1) 입력받은 문자 LF(%0A) CR(%OD)을 제거하고 사용한다.


9. 크로스 사이트 요청 위조 취약점의 보안 대책이 아닌 것은?

   (1) 외부에서 입력된 값은 CR, LF 등의 개행 문자를 제거하고 사용한다.

 

10. 파일 업로드 취약점을 예방하기 위한 프로그램 작성 방법으로 적절하지 않은 것은?

   (4) 파일을 저장하는 경로는 웹루트 아래 임의의 폴더여야 한다.

 

11. 다음은 대칭키를 생성하는 예제 코드다. ?에 가장 적절한 값은?

public byte[] test() throws NoSuchAlgorithmException {

   KeyGenerator keyGen = KeyGenerator.getInstance("AES");

   keyGen.init( ? );

   SecretKey key = keyGen.generateKey();

}

   (2) 128

 

11. 다음 소스 코드에서 발생할 수 있는 보안 취약점?

Protected void doGet(HttpServletRequest request, HttpServletResponse response)

                       throws ServletException, IOException {

   String query = request.getQueryString();

   if (query.contaions("url")) {

      String url = request.getParameter("url");

      response.sendRedirect(url);

   }

   (4) 안전하지 않은 리다이렉트와 포워드




CHAPTER 05. 안전하지 않은 코딩 스타일


1. 다음 중 안전하지 않은 예외 처리 유형이 아닌 것은?

   (4) 디폴트 설정 노출

 

2. 부적절한 예외 처리 취약점은 여러 종류의 예외가 발생할 경우 각각의 예외에 대응한 처리 작업을 수행하지 않고 최상위 클래스인 [    Exception    ]을 사용 전체 에러 처리를 간단하게 처리하는 상황에서 발생 수 있다.

 

3. 다음 예제 코드에서 발생할 수 있는 취약점은?

public void readFromFile(String fileName) {

  try {

     ...

     File myFile = new File(fileName);

     FileReader fr = new FileReader(myFile);

     ...

   } catch (Exception ex) {

      // 적절한 예외 처리 수행 코드

      ...

    }

}

   (1) 부적절한 예외 처리                                             

 

4. 다음 소스 코드에서 발생할 수 있는 보안 약점은?

public static int cardinality (Object obj, final Collection col) {

     int count = 0;

     Iterator it = col.iterator();

     while (it.hasNext()) {

         Object elt = it.next();

         if ((null == obj && null == elt) || obj.equals(elt)) {

             count++;

         }

     }

     return count;

 }

   (4) (null) 포인트 역참조


5. 다음 예제 코드에서 발생 가능한 보안 취약점은?

01

02

03

04

05

06

07

08

09

10

11

12

 public class U9627 {

   public synchronized void aMethod() {

       for (int i=0; i<10; i++) System.out.print(i);

   }

    ……

  }

 

 public class Foo extends U9627 {

   public void aMethod() {

         for (int i=0; i<20; i++)   System.out.print(i);

   }

 }

   (3) 동기화 부재                                     

 

6. [        동기화 처리 부재        ] 보안 약점은 자원을 사용하는 시점과 검사하는 시점이 달라서, 검사 시점에 존재하던 자원이 사용 시점에 사라지는 등 자원의 상태가 변하는 경우에 발생하며, 해당 보안 약점으로 인해 동기화 오류뿐 아니라 교착 상태 등과 같은 문제점이 발생할 수 있다.

 

7. 다음의 설명에서 빈칸에 공통으로 들어갈 ?

[       ] 데이터의 경우 getter setter 메소드를 구현할 때, getterr [         ]을  복사해 복사된 영역의 주소를 반환한다. 반대로 setter메소드로 [         ]을 세팅할 때는 전달된 배열 주소를 이용 다른 영역에 배열을 복제한  [         ] 요소가 참조되도록 설정한다.

 

   (1) private 배열                                


8. 다음 코드가 가진 취약점 제거 방법이 아닌 것은?

01

02

03

04

05

06

07

08

09

 public class A extends HttpServlet {

   private String name;

   protected void doPost(HttpServletRequest request, HttpServletResponse response)

      throws ServletException, IOException {

        name = request.getParameter("name").trim();

        ……

        out.println(name + ", thanks for visiting!");

   }

 }

  (3) 5행을 동기화 블으로 감싼다.

 

9. 다음 예제 코드가 가질 수 있는 취약점은?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

 public class ApiTest extends  HttpServlet   {

     public void doGet(HttpServletRequest req, HttpServletResponse res)

                 throws ServletException, IOException {

          boolean trusted = false;

          String ip = req.getRemoteAddr();

          InetAddress addr = InetAddress.getByName(ip);

          if (addr.getCanonicalHostName().endsWith("trustme.com") ) {

              trusted = true;

          }

          if (trusted) {

              // 신뢰하는 시스템에 허용된 기능을 수행한다.

          } else {

              // 신뢰하지 않는 시스템으로 부터의 요청을 거부하는 작업을 수행한다.

           }

       }

 }

  (4) 부적절한 API 사용

 

10. 잘못된 API 사용 취약점에 대한 설명으로 적합하지 않은 것은?

  (4) 클라이언트의 요청에 대한 신뢰 관계 DNS 룩업(Lookup)에 의존 중요한 결정을 수행하도록 구현하는 것이 바람직하다



PART 03. 소프트웨어 보안 강화 기법


CHAPTER 06. 오픈소스 보안 프레임워크 활용



1. 웹 애플리케이션 개발 과정에서 발생하는 다양한 보안 침해 사고를 해결하기 이해 OWASP에서 제작 및 배포되는 보안 라이브러리는?

   ESAPI

 

 

2. ESAPI 구성 인터페이스 중 다음과 같은 기능을 정의하고 있는 것은?

일반 사용자와 관리자 등으로 권한을 분류해 관리해주는 규격을 정의하고 있으며 로그인, 로그아웃, 로그인한 사용자 정보 설정과 같은 기능을 정의

  (4) Authenticator

 

3. 잘못된 기능 접근제어 취약점을 해결하는 데 가장 적합한 ESAPI의 구성요소는?

   (2) AccessController

 

4. 다음 ESAPI 구성요소 중 중요 데이터의 암호화 정책을 정의하기 위한 설정 파일 관리 기능을 정의하고 있는 것은?

   (4) EncryptedProperties

 

5. 쿠키에 대한 기본 설정, 헤더의 최대 크기 지정, 세션ID 이름 설정, 업로드 허용 확장자 목록, 업로드 허용 최대 파일 크기와 같은 설정 값을 사용하는 ESAPI의 구성요소는?

   (3) HTTPUtilities  



CHAPTER 07.  보안 약점 진단 도구 활용


1. 소프트웨어가 실행되지 않는 환경에서 소스 코드의 의미를 분석해 소프트웨어의 결점을 찾아내는 정적 분석 기법이 아닌것은?

   (4) 스트레스 테스트(Stress Test)

 

2. 다음 중 정적 분석의 특징이 아닌 것은?

   (4) 프로그램 개발 중 진단이 불가능하다.

 

3. 다음 중 동적 분석의 특징이 아닌 것은?

   (4) 정적 분석 기법과는 상호 배타적 기능을 수행하는 것이 바람직하다.

 

4. 다음 [   ] 안에 공통으로 들어갈 알맞은 말은?

디버깅이 바로 프로그램 [    동적    ] 분석이며 단위 테스트도 일종의 프로그램 [   동적   ] 분석에 속한다

 

5. [     정적분석   ]은 소프트웨어가 가지고 있는 보안 약점을 점검함으로써 완성된 소프트웨어에서 발생 가능한 잠재적인 취약점을 예방하기 위해 툴을 이용해 진단하는 보안 분석 기법이다.

 

6. [    동적분석     ]은 소프트웨어 실행 과정에서 다양한 입출력 데이터의 변화와 사용자 상호작용에 따른 변화를 툴을 이용해 진단하는 보안 분석 기법이다.

 

7. 행자부 보안 약점 항목의 빈칸에 적절한 취약점 명을 기술하시오.

순번

결함 ID

위험도

체커 명

8

245.511.2536

1

OPEN REDIRECT 

행자부 보안 

약점

 신뢰되지 앟는 URL 주소로 자동접속 연결

파일

D:\javaDev\workspace\openeg\src\kr\co\openeg\lab\test\controller\TestController.java

위반 라인

274

검증자 의견

 

270.    public String testForwarding(HttpServletRequest request,HttpServletResponse response){

271.           String url=request.getParameter("data");

272.           System.out.println("url: "+url);

273.           try {

274.                   response.sendRedirect(url);

275.           } catch (IOException e) {

276.                   // TODO Auto-generated catch block

277.                   return "redirect ������";

278.           }

 

8. 행자부 보안 약점 항목의 빈칸에 적절한 취약점 명을 기술하시오.

순번

결함 ID

위험도

체커 명

62

245.511.2590

2

PUBLIC DATA ASSIGNED TO PRIVATE ARRAY

행자부 보안 약점

  private 배열에 public 데이터 할당

파일

D:\javaDev\workspace\openeg\src\kr\co\openeg\lab\test\util\CapsulationTest.java

위반 라인

52

검증자 의견

 

48.            return color1;

49.     }

50.

51.     public void setColor1(String[] color1) {

52.            this.color1 = color1;

53.     }

54.

55.     public String[] getColor2() {

56.            return color2;

 

9. 행자부 보안 약점 항목의 빈칸에 적절한 취약점 명을 기술하시오.

순번

결함 ID

위험도

체커 명

2

245.511.2530

1

SQL INJECTION.iBARIS 

행자부 보안 약점

SQL 삽입

파일

D:\javaDev\workspace\openeg\src\kr\co\openeg\lab\board\dao\board.xml

위반 라인

43

검증자 의견

 

39.     <select id="getSearchTotalNum" resultClass="int">

40.            select

41.                    count(idx)

42.            from jmboard

43.            where $type$ like '%$keyword$%'

44.     </select>

45.     <select id="searchArticle" parameterClass="java.util.HashMap" resultClass="BoardModel">

46.            select

47.                    b.idx, b.writer, b.subject,




                                 

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

[작성중... ]



File API


자바스크립트를 이용하여 파일 시스템에 있는 파일의 데이터를 읽을 수 있도록 지원한다. 이 기능으로 인해 HTML5에서는 플러그인 없이도 시스템에 있는 파일을 유연하게 다룰 수 있게 되었다.


File API의 보안 위협은 현재까지는 없다. 악성 자바스크립트를 브라우저에 삽입한다 하여도 사용자가 자의적으로 파일을 선택하지 않는 이상 공격자는 아무런 공격을 수행할 수 없다. 하지만 사회 공학적 기법을 활용하여 사용자의 시스템에 있는 파일을 탈취하는것이 전혀 불가능한것은 아니다.



블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

[작성중...]


Geolocation


HTML5의 Geolocation API는 브라우저 자체 기능만으로 단말의 위치 정보계산이 가능하다.  스마트 단말의 경우 GPS, 3G, 4G 네트워크 정보등을 기반으로 위치 정보가 수집된다. 


Geolocation 의 보안 위협은 Geolocation API를 사용해야 하는 경우 사용자의 동의를 받도록 설계되어 있지만 동일 도메인에서는 한번의 동의를 통해 사용자의 위치 정보를 지속적으로 수집할 수 있다. 이 경우 사용자가 위치 정보 수집을 위한 악성 링크를 클릭하는 경우 자신의 위치 정보를 공격자에게 지속적으로 전송할 수 있다.  즉 단순히 사이트 방문만으로도 사용자의 위치 정보가 노출 될 수 있개 때문에 위험성이 크다. 

블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

[작성중....]



Web Socket


HTTP는 브라우저가 서버에 요청을 해야만 서버가 응답 하는 구조로 설계되어 있다. 이러한 구조는 채팅이나 주식정보와 같은 실시간 데이터를 전달해야 하는 경우 제한적이다.  또한 한번의 요청을 위해 세션연결/종료를 반복해야 하는 오버헤더도 크다.  한번의 세션 형성을 통해 전이중 통신이 가능한 기술에 대한 요구사항이 커지고 되었고 이것을 반영한것이 웹 소켓이다.




[그림3] 웹 소켓 동작 원리           [출처: Intenet& Security Focus 2013 12월호]


웹 소켓의 보안 위협은 사용자의 허가 없이 다른 도메인으로 연결 요청을 발생 시킬 수 있으며, 이 연결에 대해 사용자에게 알려주지 않기 때문에 사용자 모르게 브라우저를 통해 다른 도메인에 있는 시스템과 통신 채널을 생성하여 데이터 송수신이 가능하다.


블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

[작성중.....]


Web Storage


HTML5 이전 버전에서는 클라이언트 측에서 웹애플리케이션관련 컨텐츠를 저장할 때 주로 쿠키를 사용하였다. 하지만 쿠키는 도메인 사이트별로 20개, 4K 크키를 넘을 수 없다는 제약사항이나, 서버로 요청이 날라갈때 마다 해당 도메인에 대한 쿠키값이 모두 포함되어 전달되므로 해서 불필요한 오버헤더, 웹션탈취와 같은 문제점을 야기 시켰다.


Web Storage는 웹사이트와 관련된 컨텐츠를 사용자의 컴퓨터에 저장하고 이후 자바스크립트를 이용하여 접근하여 통제하는 것이 가능하다. 또한 컴퓨터에 저장할 수 있는 용량도 브라우저마다 조금은 다르겠지만 보통 도메인당 5MB 정도의 크기를 사용할 수 있다.


웹 스토리지는 세션 스토리지와 로컬 스토리지로 구분할 수 있다.

Session Storage는 기본적으로 로컬 스토리지와 유사하지만 브라우저 또는 탭을 종료하는 경우 데이터가 삭제된다.

Local Storage는 모든 텍스트값을 저장할 수 있다. key-value쌍으로 구분되어 저장되며, key을 통해 값에 접근할 수 있다. 사용자나 웹애플리케이션에 의해서 생성/삭제 될 수 있으며, 브라우저 종료시에도 값이 삭제되지 않는다.




 [그림2] 세션 스토리지 vs 로컬 스토리지      [출처: Intenet& Security Focus 2013 12월호]



웹스토리지 관련 가장 큰 보안 이슈 해당 영역에 저장되어 있는 데이터에 대한 불법적인 접근을 사용자가 인지 할 수 없다는 것이다. 웹 스토리지에 대한 모든 접근및 제어는 자바 스크립트를 통해 이루어지므로 XSS 등 스크립트 기반의 취약점이 있는 사이트의 경우 공격자는 사용자의 브라우저에 있는 모든 웹 스토리지 데이터를 사용자 모르게 조작하거나 가져 갈 수 있다.  즉 웹 스토리지 자체의 취약점은 아니지만 쿠키에 비해 저장공간이 커 다양한 정보가 저장될 수 있으며, 또한 유출될 수 있다. 


블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

티스토리 툴바