본문 바로가기

보안/시큐어코딩

[문제풀이] 학습확인문제 정답


 


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,