'분석툴'에 해당되는 글 2건

  1. 2009.09.16 프로그램 취약성 점검 및 보안 코딩을 위한 방안 비교
  2. 2009.07.04 Valgrind 디버깅과 프로파일링
2009. 9. 16. 14:48

프로그램 취약성 점검 및 보안 코딩을 위한 방안 비교

1.       소스 보안 분석 툴 활용
포티파이
SCA(Fortify Source Code Analysis) 4.0
클록워크
(Klockwork) K7,5,
온스 랩스(Once Labs) 온스
4.1
아모라이즈(armorize)
Securecode
컴퓨웨어(Compuware)
DevPartner Security checker

사용시점 : 개발시 부터 활용 가능

: 개발자
적용기간 : 1주일 이내/Web Application
    :  2~3/개발자(최소 사용자 제한으로 가격 매우 고가
)
    : 어플리케이션 보안의 가장 근본적인 대책은 소스보안 이라는 부분에서

          
접근하였으나 비용 측면에서 매우 고가이며, 툴은 일뿐이라는 상식
          
벗어나지는 못함.
    : 투자대비 효과 측면에서 솔루션과 비교하여 차이 없음

2.       어플리케이션 취약성 분석 툴
Watchfire의 Appscan 7.6 kor
Acunetix의 Web vulnerability Scanner 5
패닉시큐리티 PSSCANWEB
잉카인터넷   nProtect WebScan
이븐스타     BigLook Scanner

사용시점 :  개발 완료후 테스트 시점  및 운용단계
            (Appscan은 개발시 부터 활용가능)
사 용 자 : 개발자 및 전산 관리자, 보안 관리자
적용기간 : 1일 (취약성 분석 기간),  조치 기간은 개발자의 능력에 따라 상이함
    액 :  1천~1억 대(기능에 따라 가격차 천차만별)
    뷰 : 개발 시에 보안을 고려한 개발은 시간적 금전적으로 많은 비용이 수반
           되는 단점으로 인하여, 이를 극복하고자 거꾸로 해커입장에서 취약성을
           자동 분석하고 그에 대한 보고서 및 조치방안 까지 제공하여 소스보안
           과 동일한 효과를 내며, 투자대비 좀더 효율적이며, 다양한 용도로 활용
           가능하다. 소스분석 툴과 마찬가지로 툴이라는 한계는 벗어나지 못함.
           일부 국산 툴은 국정원 보안성 심사라는 형식에 치우친 나머지 수준이하의
           기능을 보임.

3.       Secure Module(보안 모듈)
사용시점 : 개발 시부터 활용 가능
사 용 자 : 개발자
적용기간 : 2-3일 이내/Web Application
    액 : 2~3천 내외/Web Application
    뷰 : 개발 시 사용되는 보안 핵심프로세스를 일반 초보 개발자도 손쉽게 적용 가 
             능토록 한 부분이 매우 인상적(초보 개발자도 전체 취약점의 70~80%이상 제
             거 가능), 소스분석 툴이나 취약성분석 툴과 같은 툴의 한계성은 존재하나,
            보안전문가에 의한 모의해킹 및 취약성 분석 비용이 포함된 금액이기 때문에
            비용대비 효과 측면에서 매우 뛰어나다. 또한, 추가비용 없이 타 솔루션에 비
            하여 매우 높은 보안성 구현이 가능한 것이 장점이다.

4.        
최근 개인정보 누출 및 홈페이지 위,변조, 사이버해킹 등의 사고가 빈번하게 발생함에 따라 그와 관련된 솔루션 들이 봇물을 이루고 있지만 자동화된 툴 및 솔루션으로는 그 방어에 한계가 있다는 것을 반드시 염두에 두어야 할 것이다. 반드시 관련 솔루션을 도입 시에 보안전문 컨설턴트에 의한 컨설팅 제공여부를 확인하지 않으면 비용은 비용대로 지불하고 사상누각을 지은 형국이 되고 말 것이다. 


출처 : http://blog.naver.com/bush42

Trackback 0 Comment 0
2009. 7. 4. 20:00

Valgrind 디버깅과 프로파일링

1 개요

1.1 Valgrind란?

Valgrind는 Linux-x86 용 실행 파일의 디버깅과 프로파일링을 위한 오픈 소스 툴이다. Valgrind는 Memcheck이나 Addrcheck 툴을 사용하여 실행중인 프로그램에서 메모리 누출(leak)/오염(corruption)을 찾아낼 수 있다. 그 외의 Cachegrind, Helgrind 툴을 사용하여 캐쉬 프로파일링을 하거나, 멀티 쓰레드에서의 데이타 경쟁을 발견을 할 수 있다. 이 프로그램은 Julian Seward가 개발했다.

1.2 목적

이 문서는 간단한 Valgrind의 사용법을 설명한다. - 현재(1 Feb 2005)는 Memcheck 툴의 사용법에 관해서만 설명한다. - 더 자세한 내용을 알고 싶다면 [http]http://valgrind.kde.org/docs.html에서 Valgrind 관련 문서들을 볼 수 있다.

1.3 주의

현재(1 Feb 2005) Valgrind의 안정 버전은 2.2.0 이고, 버전 2.0.X와 2.2.X은 사용법이 다르다. 이 문서는 2.2.X 버전의 Valgrind의 사용법을 다룬다.

2 Valginrd 설치

2.1 Valgrind 소스 얻기

Valgrind의 소스는 Valgrind 홈페이지의 다운로드 페이지에서 받을 수 있다.
Valgrind 다운로드 페이지

2.2 설치

위의 페이지에서 bzip2 형식으로 압축된 압축 파일을 풀고, 설치한다.

    # tar xvjf valgrind-2.2.0.tar.bz2
    # cd valgrind-2.2.0
    # ./configure
    # make
    # make install

3 Valgrind 사용

3.1 Valginrd의 각 툴에 대해서

3.1.1 Memcheck

Valgrind의 Memcheck는 다음과 같은 경우를 발견하고 보고한다.
  • 초기화되지 않은 메모리의 사용
  • free된 메모리에 읽기/쓰기를 시도하는 경우
  • malloc된 메모리 블럭 외에 읽기/쓰기를 시도하는 경우
  • stack의 부적절한 지역에 읽기/쓰기가 시도되는 경우
  • 메모리 누출 - malloc되고 free되지 않은 메모리
  • 초기화되지 않거나 주소를 알 수 없는 메모리가 시스템 호출로 넘겨지는 경우
  • memcpy()와 관련된 함수에서 src와 dst 포인터가 겹치는 경우
  • 몇 가지의 POSIX pthreads API의 잘못된 사용

3.1.2 Addrcheck

Addrcheck는 Memcheck의 가벼운 버전이다.

3.1.3 Cachegrind

Cachegrind는 프로그램의 캐시 프로파일링을 한다.

3.1.4 Helgrind

Helgrind는 멀티스레드 프로그램에서 데이터의 경쟁 상태를 발견한다.

3.1.5 그 밖의 툴

위에서 설명된 툴의 보다 자세한 설명이나 그 외의 툴들에 관한 설명은 [http]Valgrind 2.2.0 매뉴얼(http://developer.kde.org/~sewardj/docs-2.2.0/manual.html)을 참조한다.

3.2 Valgind 사용

3.2.1 Valgrind 실행

Valgrind는 아래의 usage와 같이 valgrind 이후에 쓰고 싶은 tool의 이름을 쓰고 마지막에 디버깅이나 프로파일링을 할 프로그램과 인자를 쓰면 된다. 자세한 것은 'valgrind --help'로 볼 수 있다.

    usage: valgrind --tool=<toolname> [options] prog-and-args
예) 다음과 같이 'ps'의 메모리 사용을 체크할 수 있다.

    # valgrind --tool=memcheck ps -ax

3.2.2 Valgrind의 Memcheck 사용 예

예제 1

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int p, t;
    char * pc;

    if (p == 5) {       /* 초기화되지 않은 메모리의 사용 */
        t = p + 1;
    }

    printf("%d is not initialized\n", p); /* 초기화되지 않은 메모리의 사용 */

    pc = (char *)malloc(sizeof(char) * 10);

    /* pc가 free되지 않음 */

    return 0;
}
위와 같은 예제를 Valgrind를 사용하여 실행하면 다음과 같은 결과가 나온다. 에러 리포트 설명은 주석(';'으로 시작하는 문장)으로 달았다.
# valgrind --tool=memcheck ./a.out
==27949== Memcheck, a memory error detector for x86-linux.
==27949== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward et al.
==27949== Using valgrind-2.2.0, a program supervision framework for x86-linux.
==27949== Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward et al.
==27949== For more details, rerun with: -v

; 앞의 '==26306=='은 프로세스 ID를 뜻한다.

==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x804844A: main (in /home/deicide/play/a.out)
==27949==

; 위의 에러는 main 함수에서 if (p == 5) {...} 에서
; p가 초기화 되지 않았음을 나타낸다.

==27949== Use of uninitialised value of size 4
==27949==    at 0x1B967329: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966C2C: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966E93: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966EB4: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966ED5: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
==27949==
==27949== Conditional jump or move depends on uninitialised value(s)
==27949==    at 0x1B966F12: _IO_vfprintf (in /lib/libc-2.2.4.so)
==27949==    by 0x1B96FC11: _IO_printf (printf.c:33)
==27949==    by 0x8048463: main (in /home/deicide/play/a.out)
134518296 is not initialized

; 위의 에러들은 printf("%d is not initialized\n", p); 에서 
; p가 초기화 되지 않았음으로 나타나는 에러들이다.

==27949==
==27949== ERROR SUMMARY: 15 errors from 7 contexts (suppressed: 19 from 2)
==27949== malloc/free: in use at exit: 10 bytes in 1 blocks.
==27949== malloc/free: 1 allocs, 0 frees, 10 bytes allocated.

; malloc/free 된 block의 상태를 보고한다.
; 10bytes가 malloc되고 free가 없었음을 알 수 있다.

==27949== For a detailed leak analysis,  rerun with: --leak-check=yes
==27949== For counts of detected errors, rerun with: -v

; 메모리 누출의 자세한 보고를 위해서 --leak-chcek=yes 옵션을 줄 수 있다
옵션으로 '--leak-check=yes'를 줄 경우 아래와 같이 메모리 누출에 대한 자세한 보고를 볼 수 있다. 아래는 동일한 Sample을 '--leak-check=yes' 옵션을 줘서 실행한 결과의 메모리 누출 결과 부분이다. 각각의 definitely leak, possibly lost, still reachable, suppressed가 뜻하는 것은 [http]Valgrind FAQ(http://valgrind.kde.org/faq.html)의 6.2 항목에 자세히 나와있다.
# valgrind --tool=memcheck --leak-check=yes ./a.out

...

==24404== ERROR SUMMARY: 15 errors from 7 contexts (suppressed: 19 from 2)
==24404== malloc/free: in use at exit: 10 bytes in 1 blocks.
==24404== malloc/free: 1 allocs, 0 frees, 10 bytes allocated.
==24404== For counts of detected errors, rerun with: -v
==24404== searching for pointers to 1 not-freed blocks.
==24404== checked 1411896 bytes.
==24404==
==24404==
==24404== 10 bytes in 1 blocks are definitely lost in loss record 1 of 1
==24404==    at 0x1B903E85: malloc (vg_replace_malloc.c:131)
==24404==    by 0x8048470: main (in /home/deicide/play/a.out)
==24404==
==24404== LEAK SUMMARY:
==24404==    definitely lost: 10 bytes in 1 blocks.
==24404==    possibly lost:   0 bytes in 0 blocks.
==24404==    still reachable: 0 bytes in 0 blocks.
==24404==         suppressed: 0 bytes in 0 blocks.
==24404== Reachable blocks (those to which a pointer was found) are not shown.
==24404== To see them, rerun with: --show-reachable=yes
다른 툴이나 옵션에 대해서는 [http]Valgrind full documentation(http://developer.kde.org/~sewardj/docs-2.2.0/manual.html)을 참조한다.

4 참조


출처 : http://bibreen.cafe24.com/


Trackback 0 Comment 0