engineering/Network Eng.2006. 8. 7. 14:07
최근까지 주류를 이루던 해킹은 운영체제프로토콜 설계상의 버그, 또는 개발자들의 본래 의도와는 다르게 보안상 심각한 결과가 초래될 있는 취약성들을 이용한 기법들이 대부분이었다. 전문 해커들에 의해 익스플로잇(해킹 코드)이 발표될 때 까지는 해킹 지식이 적은 사람(Script Kiddy)들에 의해 무분별하게 악용될 가능성은 적었지만 일단 발표가 되고 나면 쉽게 악용되어 취약한 시스템을 운영하는 기업이나 기관에 많은 악영향을 미쳐왔다. 그러나 이러한 취약성들은 패치를 적용하고 구성 설정을 변경하거나 외부로부터의 접근을 적절히 통제할 수 있는 보안 솔루션(라우터, 방화벽 등)

에 의해 비교적 쉽게 해결이 가능했다.

최근 해킹의 화두는 웹 애플리케이션의 취약성을 이용하는 것이다. 그러한 이유를 위에서 언급된 내용을 토대로 말하자면 요즘 대부분의 기업이나 기관들은 시스템의 패치나 구성설정 변경을 제대로 하고 있지 못하더라도 접근 통제 솔루션을 하나 이상은 갖추고 있어서 외부로부터 유입되는 부적절한 접근으로부터 내부의 시스템을 보호할 수 있는 장치를 마련하고 있다. 그러나 이러한 솔루션이 갖추어져 있더라도 필수 불가결하게 서비스해야 하는 것이 바로 웹 서비스이다. 접근 통제 솔루션은 웹 서비스로 접근하는 패킷을 통제하지 않고 내부로 유입시키기 때문에 만약 통과되는 패킷에 악의적으로 패킷을 조작해서 보낸다면 정상 패킷으로 간주하여 적절한 통제를 하지 못하게 된다.





[그림 1] 최근 해킹 경향(발췌: SPI Dynamics)


이러한 배경을 토대로 이제까지 발표되어 악용되었던 웹 애플리케이션 취약성 유형을 크게 10가지로 나눌 수 있는데 이번 호에는 그 중 3 가지 취약성에 대해 설명하고 간략하게나마 취약성을 예방할 수 있는 방법을 소개하겠다. 좀더 자세한 내용을 원한다면 코코넛 시큐리티 레터 8월호의 참고 자료를 참조하면 된다.


  • 검증되지 않은 파라미터의 허용(Unvalidated Parameters)

  • 부적절한 접근 통제(Broken Access Control)
  • 부적절한 계정과 세션 관리(Broken Account and Session Management)
  • 크로스 사이트 스크립팅 허점(Cross-Site Scripting(XSS) Flaws)
  • 버퍼 오버플로우(Buffer Overflows)
  • 시스템 명령어 삽입 허용(Command Injection Flaws)
  • 잘못된 오류 처리(Error Handling Problems)
  • 안전하지 않은 암호화 메커니즘 사용(Insecure Use of Cryptography)
  • 원격 관리 허점(Remote Administration Flaws)

  • 웹과 애플리케이션 서버의 구성 설정상의 오류(Web and Application Server Misconfiguration)

    1. 검증되지 않은 파라미터의 허용(Unvalidated Parameters)


    클라이언트로부터 웹 애플리케이션이 요청을 받았을 때 그 요청이 적절한 값인지 여부를 검증하지 않음으로 인해 백엔드에 존재하는 허가되지 않은 자원에 접근할 수 있는 취약성이다. url, 쿼리 문, HTTP 헤더, 폼 필드, 쿠키, 그리고 숨겨진 필드 등의 웹 요청(HTTP request) 들을 강제로 브라우징 한다거나 명령어 삽입, SQL 문 삽입, 쿠키 위/변조등을 통해서 보안 메커니즘을 우회할 수 있게 된다.

    [예방 방법]

    웹 요청에 대한 잘못된 예외 규칙을 다음과 같이 정하여 소스 코드에서 철저하게 검증을 하는 것이다.

    - 데이터 형식(문자, 정수, 실수 등)
    - 허용되는 문자셋
    - 최소, 최대 허용 길이
    - NULL 값의 허용 여부
    - 파라미터의 허용 여부
    - 허용되는 숫자 범위
    - 정규 표현식 등


    2. 부적절한 접근 통제(Broken Access Control)

    인증되지 않은 사용자가 시스템에 접근하여 중요한 파일 읽거나 권한 없는 기능들을 수행할 수 있는 취약성이다. 예를 들자면 허가되지 않은 사용자가 웹 요청을 통해서 유닉스 시스템의 /etc/passwd 파일을 읽거나 윈도우 시스템의 웹 루트 디렉터리를 읽을 수 있는 등의 경로 유출(Path Traversal)을 허용하는 것이다. 이러한 취약성은 웹 컨텐츠와 기능에 적절한 접근 통제를 하지 못하는 것이 원인이다.

    [예방 방법]

    다음과 같은 접근 통제를 점검한다.

    - 안전하지 않은 ID 점검
    - 절대 경로를 통한 인증 회피 가능 점검
    - Path Traversal 가능 점검
    - 웹 컨텐츠의 퍼미션 점검
    - 클라이언트 측의 케싱 점검


    3. 부적절한 계정과 세션 관리(Broken Account and Session Management)

    계정에 대한 증명(Account Credential)

    과 세션 토큰이 적절히 보호되지 못함으로 인해 패스워드나 키, 세션 쿠키, 그리고 다른 토큰 등을 악용하여 인증 메커니즘을 무력화 시키거나 다른 사용자의 아이디를 추측할 수 있는 취약성이다. 예를 들자면 사용자의 패스워드 변경, 패스워드 분실, 사용자 정보 수정 등을 포함하는 증명서와 동적 세션 관리가 적절히 개발되지 않아서 다른 사용자에 의해 추측되거나 가로채기를 당하는 것이다.

    [예방방법]

    다음과 같은 항목들에 대해 보안 정책을 강화한다.

    - 패스워드 변경 통제
    - 패스워드 복잡성
    - 패스워드 저장
    - 전송 중인 증명서 보호
    - 세션 아이디 보호
    - 계정 목록
    - 신뢰 관계
    - 백엔드 인증


    4. 크로스 사이트 스크립팅 허점(Cross-Site Scripting(XSS) Flaws)

    Cross-site Scripting 취약점은 공격자가 웹 애플리케이션을 사용해서 다른 최종 사용자에게 자바스크립트와 같은 악성 데이터를 보낼 때 발생한다. 그 데이터는 클라이언트에서 실행되는 Java스크립트, VB스크립트, ActiveX, Flash등을 실행하는 코드들이 존재하게 된다. 최종 사용자들은 이렇게 악성 코드들이 포함된 웹 사이트의 링크를 클릭하거나 이메일에 포함된 내용을 읽거나 BBS에 게시된 게시물을 클릭하는 것만으로도 사용자의 환경 설정사항을 변경하거나, 쿠키(cookie)를 가로채고 잘못된 광고들 게시하는 등의 일들을 할 수 있다.



    [예방 방법]

    해당 취약점을 예방할 수 있는 최선의 방안은 모든 코드들을 상세히 검증하는 것이다. 즉, 헤더, 쿠키, 질의문, 폼 필드와 숨겨진 필드등과 같은 모든 파라미터들을 엄격한 규칙에 의해서 검증한다. 또한 다음과 같이 왼쪽의 필드의 입력 데이터를 오른쪽의 필드로 변환해서 필터링한다.


    FromTo
    < & l t;
    > & g t;
    (& # 4 0;
    )& # 4 1;
    # & # 3 5;
    & & # 3 8;


    5. 버퍼 오버플로우(Buffer Overflows)



    버퍼오버플로우의 자세한 내용은 코코넛 시큐레터 6월호의
    "해킹기법 제2회 버퍼오버플로우"를 참조하기 바란다.

    [예방 방법]

    운영하고 있는 웹 서버 버전을 가장 최신버전으로 업그레이드 하거나 알려진 취약점을 제거할 수 있는 패치를 적용한다. 정기적으로 취약점 스케너를 통해서 취약점 여부를 점검하여 발견된 취약점에 대해서는 구성 설정을 변경하거나 패치를 적용하여 취약점을 제거한다.




    6. 시스템 명령어 삽입 허용(Command Injection Flaws)

    웹 애플리케이션에서 HTML 형식이나 쿠키, URL 파라미터 형식으로 시스템 명령어를 삽입 허용함으로써 웹 상에서도 시스템 명령을 실행할 수 있는 취약점이다. SQL 쿼리문을 삽입 허용하게 되면 DB인증 메커니즘을 무력화시켜서 중요한 데이터베이스 정보를 외부로 유출할 수 있다. 또한 데이터베이스의 DML(Data Manipulation Language), DDL(Data Definition Language) 언어가 모두 사용 가능하므로 데이터베이스의 유출뿐만이 아니라 무결성을 파괴할 수도 있다.

    다음은 시스템 명령 삽입 허용 취약점을 악용할 수 있는 스크립트, 프로그래밍 언어의 함수들이다.

    PHP
    - require()
    - include()
    - eval()
    - preg_replace() (/e 옵션과 함께 사용)
    - exec()
    - passthru()
    - `` (backticks)
    - system()
    - popen()

    Shell Scripts
    - 모두 실행 가능

    Perl
    - open()
    - sysopen()
    - glob()
    - system()
    - '' (backticks)
    - eval()


    Java(Servlets, JSP s)
    - System.* (특별히 System.Runtime)

    C,C++
    - system()
    - exec**()
    (strcpy strcat sprintf vsprintf gets strlen (특별히 null 바이트와 함께 사용될 경우) scanf() fscanf sscanf vscanf vsscanf vfscanf realpath getopt getpass streadd strecpy strtrns)

    Python
    - exec()
    - eval()
    - execfile()
    - compile()
    - input()

    [예방 방법]

    - 반드시 필요하다면 모든 시스템 명령을 사용하는 모든 사용자의 입력값을 점검한다.
    - 점검되지 않은 사용자 입력을 시스템 명령으로 전달하지 않는다.
    - 점검되지 않은 사용자 입력을 파이프(|)로 전달하지 않는다.
    - 점검되지 않은 사용자 입력을 perl의 open() 명령으로 전달하지 않는다.
    - 점검되지 않은 사용자 입력을 C 언어와 PHP의 popen() 명령으로 전달하지 않는다.
    - 점검되지 않은 사용자 입력을 ``(backticks)

    과 함께 사용하지 않는다.
    - 운영체제의 시스템 명령이 사용자 입력에 존재하는지 점검한다.
    - 모든 웹 애플리케이션엔 쉘 스크립트를 허용하지 않는다.




    7. 잘못된 오류 처리(Error Handling Problems)



    적절하지 못한 오류 처리는 웹 사이트에서 다양한 보안 문제를 야기한다. 가장 보편적인 문제는 데이터베이스 덤프, 에러 코드등과 같은 상세한 내부 메시지들이 사용자에게 노출된다는 것이다. 이러한 정보들은 바로 악용 가능하지는 않지만 향후 발생할 수 있는 공격에 정보를 제공하게 된다. 이러한 문제를 야기하는 원인은 다음과 같다.

    - 스크립팅 엔진의 설정 오류
    - Servlet/JSP Runner의 설정 오류
    - 웹 서버의 설정 오류
    - 데이터베이스의 설정 오류

    이러한 문제를 통해 유출될 수 있는 정보들은 다음과 같다.

    - 애플리케이션의 흐름
    - 추가적인 웹 서버 정보
    - 데이터베이스 형식 및 버전
    - 운영체제 형식 및 버전
    - Scripting/Programming 언어의 형식 및 버전
    - 물리적인 경로
    - 변수 이름과 값
    - 변수 형식
    - 변수의 사용 목적
    - 스크립트 소스 코드의 세그먼트
    - SQL 쿼리의 세그먼트
    - 데이터베이스와 테이블의 구조




    [예방 방법]

    웹 애플리케이션이 잘못된 요청을 받았을 때 자체 제작한 오류 페이지로 이동하도록 설정한다.

    8. 안전하지 않은 암호화 메커니즘 사용(Insecure Use of Cryptography)

    대부분의 웹 애플리케이션은 패스워드, 신용카드 번호, 계정 기록과 같은 중요한 정보나 데이터베이스를 저정하고 있기 때문에 암호화 기술을 이용하여 보호하고 있다. 이러한 암호화 기술이 웹 애플리케이션에 적용될 때 다음과 같은 구현상의 오류로 인하여 보안 허점들을 내포하게 된다.

    - 안전하지 않은 키, 인증서와 패스워드 저장
    - 적절하지 못한 메모리상의 기밀 저장
    - 잘못된 난수 소스
    - 중요 데이터 암호화 실패
    - 새로운 암호화 알고리즘 개발 시도
    - 암호화 키 변경과 같은 추가적인 지원 부재

    [예방 방법]

    이러한 취약점을 예방하기 위해서는 암호화 사용을 최소화 해야한다. 즉, 신용카드 번호와 그와 관련된 정보와 같이 중요하다고 판단되는 정보만을 암호화한다. 또한 저장된 암호화된 패스워드를 사용하는 대신 단방향 함수인 SHA-1과 같은 해쉬함수를 사용한다.



    9. 원격 관리 허점(Remote Administration Flaws)

    웹 애플리케이션을 관리하기 위해 강력한 기능을 갖는 원격 관리 도구들이 많이 존재한다. 그러한 기능들은 사용자들, 데이터, 그리고 웹 사이트의 컨텐츠들을 관리 가능하게 한다. 이러한 강력한 기능 때문에 원격 관리 도구들은 내/외부에서 공격자들의 주요 목표가 된다. 가장 일반적인 문제점은 원격 관리에 접근할 수 있는 강력한 인증 메커니즘이 갖춰져 있지 못한 이유로 인해 허가되지 않는 사용자에 의해서 웹 애플리케이션의 기밀성과 무결성, 그리고 가용성이 파괴될 수 있다.

    [예방 방법]

    ACL(Access Control List)을 이용하여 원격 관리 도구에 접근할 수 있는 대상을 엄격히 제한한다. 또한 VPN를 사용하여 관리자와 원격 관리 도구간에 암호화 통신을 한다.

    아래 그림은 단계별 방어가 적용되기 전(그림 1)과 단계별 방어가 수립된 후(그림 2)

    의 네트워크 구성을 나타낸 것이다. 그림 2처럼 단계적으로 방어 대책이 수립된다면 관리자와 일반 사용자의 네트워크가 분리되며 시스템 용도별로 네트워크가 분리되어 단계별로 보안 대책이 수립되기 때문에 안전한 네트워크 운영이 가능하게 된다.





    [그림1] 방화벽의 단계별 보안(Layered Security)

    이 적용 안 된 상태








    [그림2] 방화벽의 단계별 보안(Layered Security)

    가 적용 된 상태




    [그림 출처] Information Security 2002년 6월호




    10. 웹과 애플리케이션 서버의 구성 설정상의 오류(Web and Application Server Misconfiguration)

    웹 서버와 애플리케이션의 구성 설정은 보안 측면에서 중요한 의미를 가진다. 그러한 구성 설정들이 다음과 같은 여러 가지 요인들로 인해 보안 문제를 야기할 수 있다. 이러한 보안 문제들은 자동화된 스케닝 도구에 의해 공격자들에 의해 공격 당할 가능성이 매우 높다.

    - 서버 소프트웨어에 있는 패치되지 않은 보안 취약점들
    - 디렉터리 리스팅과 디렉터리 경로 유출을 허용하는 잘못된 서버 구성 설정
    - 스크립트, 애플리케이션 환경 설정 파일과 웹 페이지가 포함된 불필요한 기본 파일, 백업 파일, 샘플 파일들
    - 부적절한 파일, 디렉터리 권한 설정
    - 컨턴츠 관리와 원격 관리가 가능한 불필요한 서비스 활성화
    - 기본 패스워드로 설정된 기본 계정
    - 관리와 디버깅 목적의 기능들
    - 정보가 유출될 수 있는 잘못된 에러 처리
    - 잘못 설정된 SSL 인증서와 암호화 설정
    - 기본 인증서 사용 등

    [예방 방법]

    ① 여러 보안 관련 사이트(SANS institute, OWASP, CERT)나 자료 등에 언급되어 있는 보안 가이드라인을 참고하여 다음과 같은 조치들을 취한다.
       - 고려할 수 있는 모든 보안 메커니즘들 구성
       - 모든 불필요한 서비스 중지
       - 역할(roles), 퍼미션(permissions), 계정(accounts)

    설정
       - 로깅과 경고

    ② 1번과 같이 보안 가이드라인이 만들어졌다면 다음과 같은 작업들을 주기적으로 실시한다.
       - 가장 최근에 발표된 보안 취약점 모니터링
       - 가장 최신의 보안 패치 적용
       - 보안 가이드라인의 업데이트
       - 정기적인 내/외부 취약점 스캐닝




    이 글을 마무리 하며

    서두에도 언급했듯이 최근의 해킹 동향은 웹 애플리케이션을 이용한 해킹이 전체 피해 건수의 약 3/4를 상회하고 있다. 이러한 배경으로 인해 기업에서는 추가적인 보안 솔루션(웹 애플리케이션 취약점 스캐너, 웹 애플리케이션 방화벽 등)을 도입하고 있거나 도입 계획을 세우고 있다. 그러나 모든 보안이 그렇듯이 솔루션을 도입한다고 해결되는 것도 아니고 사람이 뛰어나다고 해결되는 것도 아니다.

    도입된 솔루션이 제대로 운영되기 위해 끊임없이 관리자들은 노력해야 할 것이며 웹을 개발하는 개발자들은 만들어진 보안 가이드라인을 준수하여 개발해야 하며 일반 사용자들 또한 보안 가이드라인에 준하는 행동으로 발생할 수 있는 인지된 사고를 미연에 방지해야 한다. 이처럼 기업의 모든 구성요소들이 적절하게 조화를 이뤄 야지만이 투자된 비용만큼의 보안 수준을 유지할 수 있게 된다.

    [참고 자료]

    The Ten Most Critical Web Application Security Vulnerabilities
    (http://www.owasp.org/asac)
    A Guide to Building Secure Web Applications
    (http://www.owasp.org)
    Security at the Next Level
    (http://www.spidynamics.com/whitepapers.html)
    Information Security
    (http://infosecuritymag.techtarget.com/2002/jun/insecurity.shtml)
    CERT
    (http://www.cert.org)
    SANS Institute
    (http://www.sans.org)


    Hacking Exposed - Web Applications


    내용출처 : [기타] (주)코코넛 시큐레터 8월호
    (출처 : '[해킹기법과 대응] ③ 웹 애플리케이션 해킹 (Web Application Hacking)' - 네이버 지식iN)

  • Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:47
    보안에 관심 있는 사람이라면 "버퍼 오버플로우"란 용어가 낯설지 않을 것이며, 그 중 적극적인 관리자라면 인터넷에 널려있는 다양한 버퍼 오버플로우 exploit(공격코드)을 다운로드 받아서 테스트도 해 봤을 것이다. 그 결과는 어떠했나? Exploit 코드가 지시하는 컴파일 옵션과 대상 서버가 적절했다면 손쉽게 root 권한을 획득했을 것이다. 물론 공격에 성공했다고 '버퍼 오버플로우"에 대해서 모든 것을 안다고 자신 있게 말할 수 있는 사람은 그리 많지 않을 것이다.

    본 문서에서 "버퍼 오버플로우"의 A~Z까지를 설명할 필요는 없을 것이며(이미 뛰어난 문서들이 발표되어 있기 때문에) "버퍼 오버플로우"의 개념 이해를 목적으로 설명하겠다.

    "버퍼 오버플로우"란?

    말 그대로 버퍼를 넘치게(overflow) 하는 것을 의미하며, 풀어서 설명하면 메모리에 할당된 버퍼의 양을 초과하는 데이터를 입력하여 프로그램의 복귀 주소(return address)를 조작, 궁극적으로 해커가 원하는 코드를 실행하는 것이다. 여기에서 "버퍼(buffer)"란 프로그램 처리 과정에 필요한 데이터가 일시적으로 저장되는 공간으로 메모리의 스택(stack) 영역과 힙(heap) 영역이 여기에 속하며, "버퍼 오버플로우"가 이 두 가지 영역 중 어떤 것을 이용하느냐에 따라서 두 가지로 분류할 수 있다. 본 문서에서는 그 개념이 잘 알려져 있고 스택 기반의 버퍼 오버플로우에 초점을 맞춰서 설명하겠다. 이처럼 버퍼 오버플로우의 개념을 이해하기 위해서는 프로그래밍에 대한 기초 지식이 필요하며 이로 인하여 고급 해킹 기법으로 분류되고 있다.

    "버퍼 오버플로우"의 역사

    버퍼 오버플로우는 해킹 기법이 아닌 단순한 프로그램상의 문제로 처음 소개되었는데 1973년경 C언어의 데이터 무결성 문제로 그 개념이 처음 알려졌다.
    이후 1988년 모리스웜(Morris Worm)이 fingerd 버퍼 오버플로우를 이용했다는 것이 알려지면서 이 문제의 심각성이 인식되기 시작했으며, 1997년에는 온라인 보안잡지로 유명한 Phrack(7권 49호)에 Aleph One이 "Smashing The Stack For Fun And Profit"란 문서를 게재하면서 보다 널리 알려지게 됐다. 이 문서는 다양한 "버퍼 오버플로우" 공격을 유행시키는 계기가 됐으며 현재까지 해커 지망생들의 필독 문서로 자리잡아 오고 있다. 이후 "버퍼 오버플로우"는 SANS(www.sans.org)

    에서 매년 발표하는 TOP20 공격기법 가운데 상당수를 차지하면서 해커들의 꾸준한 사랑을 받아오고 있다.


    "버퍼 오버플로우"는 어떻게 이루어지는가?

    버퍼 오버플로우의 정확한 동작원리를 이해하기 위해서는 프로그램에 의해 데이터가 어떻게 저장되는가를 우선 이해해야 한다. 하나의 프로그램은 수많은 서브 루틴들로 구성되는데 이런 서브 루틴이 프로그램에 의해 호출될 때, 함수 변수와 서브 루틴의 복귀 주소(return address) 포인터를 스택(stack)이라는 논리적 데이터 구조에 저장하게 된다. 스택은 실행중인 프로그램이 필요로 하는 정보를 저장하는 메모리 영역이다. 서브 루틴이 종료될 때 운영체제는 그것을 호출한 프로그램에 제어권을 반환해야 하기 때문에, 복귀 포인터를 통해서 프로그램이 서브 루틴의 실행을 마치고 나서 되돌아갈 주소를 가리키게 된다.

    버퍼는 할당된 메모리 공간의 높은 주소에서 낮은 주소로 채워지며, 스택 영역에 마지막으로 들어가 데이터가 제일 먼저 빠져 나오는 LIFO(Last in, First out) 특정을 가지고 있다. 이런 LIFO 특성에 의해 가장 먼저 들어가 것(복귀 포인터)이 스택에서 가장 나중에 제거된다는 것을 기억해야 한다. 서브 루틴이 실행을 마치면 가장 나중에 행해지는 것은 복귀 포인터를 스택에서 제거하여 서브 루틴을 호출한 함수로 반환하는 것인데, 만약 이 포인터가 사용되지 않는다면 서브 루틴이 실행을 마쳤을 때 프로그램은 더 이상 어디로 진행해야 할지를 알 수 없을 것이다.

    포인터(pointer)는 메모리의 위치를 저장하는 변수이다. 프로그램 실행을 위한 목적으로 다른 코드로 이동할 때 어디에서 떠났는지를 기억하기 위해 포인터를 사용해야 하며, 만약 포인터를 사용하지 않는다면 서브 루틴의 실행이 끝나고 어디로 돌아와야 할지를 알 수 없을 것이다.

    이제 스택을 조작하게 되면 어떤 일이 일어나는지를 살펴 보겠다. 프로그램이 변수의 할당된 공간에 저장될 데이터의 크기를 검사하지 않고 크기에 제한을 두지 않는다면, 변수 공간은 넘치게 될 것이다. 즉, 버퍼에 오버플로우가 발생하면 저장된 데이터는 인접한 변수 영역도 침범할 것이며 결국에는 포인터 영역까지 침범하게 될 것이다. 해커는 이러한 데이터의 길이와 내용을 적절히 조정함으로써 버퍼 오버플로우를 일으키고 운영체제의 스택을 붕괴시켜 특정 코드가 실행되도록 한다. 해커가 보낸 데이터는 대개의 경우 특정 시스템에서 실행될 수 있는 기계어 코드와 복귀 포인터에 저장될 새로운 주소로 구성되어 있으며, 복귀 포인터에 저장될 새로운 주소는 다시 메모리의 스택 영역을 가리켜서 프로그램이 서브 루틴에서 반환될 때 해커가 작성한 명령어를 실행하게 되는 것이다.

    이때 고려해야 할 것은 공격 대상이 되는 프로그램이 무엇이든 간에 해커가 공격 코드는 프로그램이 실행되고 있는 권한으로 실행될 것이라는 점이다. 따라서 해커는 공격을 성공시켰을 경우에 시스템에 대한 최상위 권한을 얻기 위해, root 또는 administrator 권한으로 실행 중인 프로그램을 공격 대상으로 삼을 것이다.

    이론상으로는 매우 직관적인 것 같지만 실제로 이 공격을 실행하는 것은 간단한 작업이 아니다. 하지만 이런 과정이 어떻게 이뤄지는지 제대로 이해하지 못 하는 스크립트 키디(script kiddie)

    도 쉽게 공개된 공격 코드를 이용하여 버퍼 오버플로우 공격을 시도할 수 있으니 보안 관리자들에게 보다 많은 업무를 주는 상황이라고 할 수 있다.



    "버퍼 오버플로우" 취약성이 많은 이유는?

    많은 프로그램이 취약성을 갖는 중요한 이유는 오류 검사를 제대로 수행하지 않기 때문이다. 오류 검사를 수행하지 않는 큰 이유 중의 하나는 개발자가 근거 없는 특수한 가정을 하기 때문이며, 정상적인 환경에서 변수에 할당된 메모리의 크기가 충분하다고 과신하는 것도 문제가 된다. 취약한 프로그램일지라도 사용자들이 올바르게 사용하여 발표된 지 수 년이 지나도 아무런 문제 없이 동작해온 경우도 있다. 그러던 중 누군가가 갑자기 "만일 프로그램에 원래와 다른 종류의 정보를 넣으면 어떤 일이 생길까?", "프로그램에 기대되는 크기보다 더 많은 데이터를 넣으면 어떤 일이 일어날까?"하는 식의 궁금증을 갖게 되었고 오류 검사를 수행하지 않는 프로그램들은 그런 궁금증의 실험대상이 되어 해킹의 목표가 되고 있다.

    이 글을 마무리하며

    "버퍼 오버플로우" 공격은 취약한 프로그램을 대상으로 공격자가 원하는 코드를 실행시킬 수 있다는 측면에서 매우 위험하며, 그 결과로 얻는 피해 범위는 시스템을 중지시키는 것에서부터 관리자 권한을 얻는 것까지 다양하다.
    보안 관리자는 "버퍼 오버플로우"가 어떻게 동작하는지 이해하고, 평상시에 벤더에서 제공하는 소프트웨어 관련 패치 적용, 최소 권한으로의 프로그램 실행, 불필요한 서비스 제거, 침입차단시스템을 통한 유해 트래픽 차단을 통해 공격 피해 가능성을 최소화해야 한다.
    오늘 아무런 문제가 없었다 하더라고 내일 역시 안전할 것이라는 맹신을 버려야 한다. 지금 이 시간에도 지구 저편에서는 열심히 공격코드를 테스트하는 누군가가 있을 테니까….


    내용출처 : [기타] (주)코코넛 시큐레터 6월호
    (출처 : '[해킹 기법과 대응] ② 버퍼 오버플로우(Buffer overflow)' - 네이버 지식iN)
    Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:44
    생활의 모든 부분에서 인터넷을 이용하고 있으며, 모든 것이 빠른 속도로 변해 가고 있다. 이런 점을 이용하여 인터넷을 통한 공격도 다양해져서 사용자들이 곤란에 빠지기도 한다. 그런데 이 기법이 나날이 고도로 지능화 되고, 순식간에 전 세계로 퍼질 수 있으므로, 각 기업 보안담당자들은 이런 현상에 대해 정확히 대비할 수 있는 지식을 갖추는데 좀 더 많은 노력을 기울여야 할 필요가 있다.

    앞으로 약 6회에 걸쳐, 가장 일반적이며 이슈가 되고 있는 해킹 기법과 대응방법에 대해 알아보도록 하자.

    1. 서비스 거부 공격(Denial of Service Attack)

    차를 몰아본 경험이 없는 사람이라 하여도, 출퇴근길 뿐만 아니라 시도 때도 없이 막히는 서울의 교통체증은 누구나 다 아는 이야기이다. 이러한 체증의 원인 중에 하나가 "병목현상"이란 단어로 설명될 수 있는데, 이 현상은 쉴새 없이 수많은 정보들을 전세계로 이어 주고 있는 인터넷이란 교통구간에서도 동일하게 적용되고 있다.

    최근 1.25 대란 사태에도 인터넷의 주소지 역할을 하는 DNS(Domain Name Server)가 처리할 수 있는 용량을 크게 넘는 요청이 쇄도하여 서비스가 중지됨으로써 하루동안 인터넷을 사용하지 못하는 대형사고가 발생하였던 경험을 가지고 있다. 다행이 업무시간을 피해 주말에 일어난 사고라 개개인들이 직접 피부로 느끼지는 못하였지만 일부 중요 서비스의 중단만으로도 사회 곳곳에서 많은 불편을 겪어야만 했다.

    서비스 거부 공격이라 함은, 시스템의 정상적인 서비스를 방해할 목적으로 대량의 데이터를 보내 대상 네트워크나 시스템의 성능을 급격히 저하시켜 대상 시스템에서 제공하는 서비스들을 사용하지 못하게 하는 공격으로 해킹 수법중의 가장 일반적인 방법이다.

    인터넷 사용자가 많지 않았던 초기의 서비스 거부 공격은 단일 시스템이나 서비스를 목표로 하는 공격자에 대한 피해자의 1:1 유형이 주류를 이루고 있었다. 그러나 최근에는 분산 서비스 거부공격이란 이름으로 N개의 불특정 시스템이 단일 네트워크를 대상으로 공격을 시도하는 N:1 유형이 주류를 이루고 있다.

    이러한 공격은 사전에 공격을 받아 감염된 불특정 다수의 시스템으로부터 동시에 공격이 시도됨으로써 그 피해는 단일 시스템 뿐만 아니라 전체 네트워크까지 마비시킬 수 있는 파괴력을 가지고 있다. N:1 유형의 공격방법은 수작업으로는 많은 시간이 소요되기 때문에 주로 웜(Worm)

    과 같은 자동화된 공격도구가 사용되는 경우가 많다. 따라서 공격도구의 특성을 제대로 파악하면 이에 대한 대응방법도 마련될 수 있기 때문에 이러한 연구활동도 전세계적으로 활발하게 진행되고 있다.

    기술적인 대응방법뿐만 아니라 가장 중요한 것은 사전에 증후 발견이다. 이러한 공격은 대규모 네트워크를 이용하기 때문에 비정상적인 네트워크 흐름을 유발하여 초기에 이상징후를 탐지한다면 이에 대한 빠른 대응이 가능하게 된다.

    이를 위하여 기본적인 보안솔루션을 구축하는 것은 물론, 적절한 관리와 운영이 병행해야 할 것이다. 또는 전세계적인 망을 가지고 있는 침해 사고 대응팀, 혹은 보안서비스 전문업체와 긴밀한 관계를 유지하여 기업보안 대책을 지속적으로 업데이트 시켜 주는 것이 무엇 보다 중요하다 하겠다.


    내용출처 : [기타] (주)코코넛 시큐레터 6월호
    (출처 : '[해킹 기법과 대응] ① 서비스 거부 공격' - 네이버 지식iN)
    Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:39


    데이터 복구가 어떻게 해서 가능하게 되는지....



    일반적인 파일시스템(FAT,NTFS)의 경우엔 파일의 정보값들을 가지고 있는 부분이 있고 실질적 데이터가 있는 부분이 있습니다.

    우리가 윈도우 탐색기로 윈도우를 열어서 볼때 탐색기는 하드디스크의 파일이나 디렉토리등의 정보 값이 있는 부분을 불러 오게 됩니다. 즉 이 부분은 실제 데이터와 사용자간을 연결해주는 고리라고 보시면 되겠습니다.

    그리고 이부분은 만약의 경우 데이터 유실을 대비하여 복사본(Mirror)을 가지고 있고, 일반적인 데이터 복구 프로그램들에서는 이부분을 사용하게 되는것입니다.

    우리가 일반적으로 데이터를 삭제했을때 실제로는 우리가 사용하는 데이터가 삭제가 되는것이 아니고 파일의 정보만을 없애게 되는것입니다.

    실제 데이터를 지우는거라면 시간이 많이 걸리기 때문이죠. 영화나 음악등을 다운받거나 다른 하드디스크로 옮길때는 시간이 무척이나 오래걸리지만 파일을 삭제한다거나 같은 하드디스크에서 다른폴더로 이동을 시킬때에는 순식간에 쏴악 지나가 버리죠. 바로 실제 데이터를 이동시키거나 삭제 되는것이 아니라 디스크의 정보값을 삭제하는것이기 때문입니다. 휴지통에 버리거나 삭제를 시켰다 하더라도 실제 데이터는 아직 그 영역에 남아 있다는 거죠.


    그럼 지워버린 데이터들은 100% 복구가 될까요? 물론 꼭 그렇지만은 않습니다. 지워도 실제 데이터가 아직 그곳에 남아 있긴 하지만 수많은 데이터들이 지워도 그자리에 계속 있다면 하드디스크가 아무리 용량이 크다 하더라도 언젠간 꽉 차서 쓸모가 없게 되버리겠죠

    데이터가 지워졌을 경우 실제 데이터는 남아있지만 지워지고 난후에 다른 데이터를 하드디스크에 복사하셨다거나 다운을 받으셨다면 이야기는 조금 틀려 질수 있습니다. 만약 500메가짜리 하드디스크가 있는데 거기에 있던 데이터를 모두 지우고 다시 500메가 용량의 데이터를 저장했다면 이미 전에 있던 데이터는 사라졌을테니까요.. 물론 이경우는 아주 최악의 경우이겠지만요..

    요즘의 보통 하드디스크는 용량이 크기 때문에 그 하드디스크를 한꺼번에 지우고 다시 일일히 하나씩 넣어서 꽉채우는건 쉬운일이 아닐테지요.. 삭제시킨 데이터는 파일 목록에서 사라지고 그공간은 공용의 공간으로 남게 됩니다. 언제든 다른 데이터가 들어갈수 있게 됩니다...

    하드디스크에 많은 파일들을 저장하고 또 파일들을 지우다보면 하나의 문제가 생기게 됩니다.. 바로 작은 용량의 파일과 큰 용량의 파일이 있는데, 작은 파일이 저장 되어 있었다가 사용자의 삭제로 공용화 되어버린 공간안에 큰 파일이 들어갈순 없지 않겠느냐 하는거겠죠.. 작은 공간에 전부 들어 갈수 없으니 다른 공간에라도 나눠서 저장을 해야 되겠죠.. 이런 문제로 파일의 조각이 생기게 되는 것이고 FAT32 시스템의 FAT영역이나 NTFS의 MFT영역에서 이 조각들의 연결정보를 가지게 되는겁니다.. 참고로 윈도우의 디스크 조각모음은 이렇게 조각이 난 파일들을 한군데로 끌어 모아서 정리하는 작업을 해주게 되는것이구요.. 한군데 모여 있다면 여기저기 검색할 필요가 없으니 하드디스크 리딩 타임이 빨라지는것또한 당연한 일이되겠지요... 단순히 인터넷에 접속해서 웹서핑을 하는것만으로도 파일들이 하드디스크로 전송이 되기도 하고 삭제가 되기도 하기 때문에 단 몇일이라도 하드디스크를 사용한 경우라면 하드디스크에는 여기저기 조각이 발생하게 되는거구요...

    이런 공간들이 많기 때문에 재설치나 파일 삭제후 PC를 사용하셨더라도 복구는 가능하게 되지만 앞서 설명했듯이 삭제된후 다시 저장되는 데이터들의 저장 위치는 같은 데이터라 하더라도 랜덤하게 저장이 되기 때문에 약간의 데이터라할지라도 덮어 씌워지게 되면 기존의 데이터는 손상이 될수도 있습니다. 그래서 손실로 인한 문제가 생겼을 경우엔 최대한 사용을 자제 하시는게 좋습니다.


    포맷을 한 경우도 같은 맥락으로 보시면 되겠습니다. 포맷은 퀵이건 로우 포맷이건 실제 데이터 영역을 지우진 않습니다. 바로 FAT혹은 MFT를 완전히 날려 버리는 것입니다. 이경우 역시 데이터는 그곳에 그대로 존재하기 때문에 복구가 가능하게 되는 것이겠구요..



    정리하자면 윈도우에서 파일을 지우거나 포맷하게 될경우 데이터는 남아 있게되고 이 파일은 당장에라도 복구가 가능 할수 있게 됩니다. 또한 아주 예전에 지운 데이터라도 조각난 공간의 어딘가에 남아 있다면 복구가 가능하게 되는것이구요. 중요한건 데이터가 삭제가 되었을 경우엔 최대한 컴퓨터를 사용하지 않으시는게 중요한 데이터를 살리실수 있는 확률이 높아지게 되는겁니다.. 정말 중요한 데이터라면 포기하지 마시고 의뢰하셔서 무료진단을 해보시길 바랍니다. 어떠한 최악의 경우에라도 복구는 가능할수도 있으니까요..


    마지막으로 FAT과 NTFS란 어떤 것들이길래 라는 의문이 드시는 분들을 위해 설명을 드리자면


    FAT(File Allocation Tabe) : 디스크는 클러스트단위로 관리가 되게 되는데 이 클러스트들의 사용 상황을 기억하는곳이 바로 파일할당테이블(FAT)입니다. FAT에는 클러스트들의 사용상황이 기술되어 있고, 또 사용중이라면 다음클러스터와의 연결정보또한 포함하고 있습니다. 클러스터 하나의 용량은 매우 작고 데이터의 용량이 클경우 하나의 클러스터에만 데이터가 저장이 될수 없기 때문에(FAT의 경우 16이냐 32이냐 혹은 디스크 용량에 따라 하나의 클러스터의 크기가 1K~32K 정도로 다릅니다) 연결되는 클러스터 들의 정보값또한 존재 하고 있습니다.. 컴퓨터를 일정기간 오래 사용하시다 보면 파일들이 여기저기 흩어져 있기 때문에 연결되는 클러스터들에 대한 정보값은 필수적인 요소가 되겠죠..


    NTFS(NT File System) : NT에서 사용되는 고유의 파일 시스템으로  FAT과는 달리 마스터 파일 테이블 (MFT: Master File Table)이 존재하고 이에 대한 미러(mirror)와 파일 로그가 유지되므로 파일 복구가 가능합니다. 한 클러스터는 FAT32와 같이 최소 1KB에서 최대 4KB로 디스크 손실이 적다. 또한 반대의 경우로 지나친 단편화(fragmentation)를 막기위해 FORMAT명령어를 이용하여 더 큰 클러스터로 초기화할 수 있습니다. (멀티미디어 데이터 등의 큰 파일을 다룰 경우에는 작은 클러스터를 사용하면 조각이 발생하므로 클러스터 크기가 클수록 효과적입니다. )


    작성자 : 임수현

    내용출처 : [직접 서술] 블로그 집필 - 데이터 복구 
    (출처 : '데이터 복구 - 소프트' - 네이버 지식iN)

    Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:35

    "PC 보안 PART ii - 폴더 접근 계정 및 그룹 설정 ①" 에서는 폴더의 사용자 권한을 설정하는 방법에 대해서 배웠다.

    컴퓨터를 많이 사용하는 분이라면 아마도 "헉, 권한 설정할 폴더가 수십개는 될텐데, 언제 다하나;" 이런 생각을 했을 것이다.

    다행이도 권한 설정은 "부모 폴더"와 "자식 폴더" 개념을 사용하여 부모폴더에 설정한 권한을 자식 폴더에도 그대로 자동적용 하도록 되어 있다.

    "부모 폴더"란, 상위의 위치에 있는 폴더 전체를 말하며 "자식 폴더"는 반대로 하위 위치에 있는 폴더 전체를 말한다.(부모폴더 = 상위폴더, 자식폴더=하위폴더)


    즉, C 드라이브 자체는 부모 폴더가 되며 C 드라이브 안에 있는 모든 폴더는 C 드라이브의 "자식 폴더"가 되는 것이다.

    더 설명하자면, C드라이브 안의 Program Files 라는 폴더가 있는데, C드라이브의 입장에서 볼 때, Program Files 라는 폴더는 자식 폴더이고, Program File 입장에서 봤을때는 C드라이가 부모 폴더가 되는 것이다.

    하나 더 나아가서 Program Files 안에도 여러개의 폴더가 있게 되는데, Program Files 폴더의 입장으로 볼 때, 이 폴더들이 "자식 폴더"가 되고, 그 폴더들의 입장에서는 Program Files가 부모 폴더가 되는 것이며, 또한 Program Files 의 부모 폴더는 C 드라이브가 되므로, Program Files 안에 있는 모든 폴더의 부모 폴더는 둘("C드라이브"와 "Program Files") 인 셈이다.

    Windows 2000 에서, 드라이브나 폴더의 "등록정보"창에서 [보안]탭을 보면 맨 아래에 다음과 같은 체크박스가 보인다.

    "□ 부모로부터 상속 가능한 사용 권한을 이 개체로 전파할 수 있음"



    Windows XP는 조금 달라서, 위의 체크박스 메시지가 보이지 않는다.

    Windows XP는 [고급] 버튼을 클릭하면 아래와 같은 창이 뜨고, 그 창에 위의 체크박스 메시지가 보인다.






    Windows 2000과 XP에서 위의 "부모 어쩌고" 하는 체크박스를 해제하면 아래와 같은 메시지가 뜬다.


    [Windows XP에서]



    [Windows 2000에서]



    [복사]버튼을 누르면 부모 폴더의 권한을 그대로 복사해 오며, 자식 폴더의 접근 권한을 따로 설정해 줄 수 있다. 이 작업을 거치지 않으면 자식폴더들은 권한 설정을 따로 해줄 수가 없다. (또한 "부모 어쩌구" 메시지를 체크하게 되면, 자신의 바로 위에 있는 폴더의 권한을 그대로 가져오기 때문에, 자신만의 독단적인 권한을 가지지 못하게 된다.)

    그런데 간혹, 부모 폴더에서 설정된 권한 설정이 자식에게 전파되지 않는 경우가 있다.

    이 경우는 [보안]탭에서 [고급]버튼을 눌러서 "자식 개체 .. 어쩌고" 하는 메시지를 체크하면 된다. (위로 3번째 그림, Windows XP [고급] 그림을 참고하자.)

    Windows 2000, XP가 모두 동일한 방법이며 메시지만 다르다.

    Windows 2000은 "모든 자식 개체의 사용 권한 재설정 및 상속 가능한 사용 권한 전파 허용" 이며 Windows XP는 위의 그림에서 처럼 "여기에 표시된 권한으로 자식 개체 권한 바꾸기" 이다.


    이 부분을 체크하고 [확인]버튼을 누르면 현재 폴더의 권한을, 자신의 모든 하위 폴더로 전파하게 된다.

    내용출처 : [직접 서술] 블로그 집필 - SECU & HACK
    (출처 : '[Windows] - 폴더 접근 계정 및 그룹 설정 ②' - 네이버 지식iN)

    Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:32
    필자가 개인적으로 좋아하는 PC 운영체제는 Windows 2000 과 XP Professional 이다.

    그 이유는 "사용자 계정"이라는 정책을 사용하고, 폴더 접근 권한을 따로 설정할 수 있기 때문이다. (컴퓨터를 좀 아는 분들은 Unix 계열 시스템의 chmod 명령어를 떠올릴 것이다.)

    보통 가정의 PC는 단 1명만 사용하는 일이 거의 드물다. 자녀가 2명 이상이면 더욱 그러하다. 뭐, 돈좀 버는 집안이라면 자녀마다 PC를 각각 사주겠지만;;

    아무튼 대다수의 가정용 PC는 어머니도 쓰시고(고스톱 등), 아버지도 쓰시고(고스톱, 바둑 등), 2명 이상이 사용하게 된다.

    그래서 다른 사용자들이 자칫 나의 프라이버시를 침해할 수 있게 된다. 아무튼 필자는 감출게 좀 있어서(ㅋㄷㅋㄷ) 다른 사용자들의 접근 권한을 다양하게 설정했다.

    그러기 위해서는 먼저, "다른 사용자"가 사용할 "사용자 계정"을 새로 만들어 줘야 한다.

    #주의! Windows XP Home 버전은 XP Professional과 달라서 아래의 작업을 할 수가 없다. Home 버전은 아에 "그룹정책"자체가 없기 때문이다. 필자는 개인적으로 Home 버전을 증오한다.-_-#


    Q: 저도 XP인데, Pro인지 Home인지 모르겠어요. 어떻게 알 수 있죠?

    A: 바탕화면 또는 시작버튼안에 있는 [내컴퓨터]에서 마우스오른쪽 버튼을 눌러 "속성"

    을 클릭하시고, [일반]탭을 보시면 "시스템"이라는 항목이 있습니다.

    Microsoft Windows XP 라는 글씨 밑에 Home 또는 Home Edition 이라고 써있으면 Home Edition이고 Professional 이라고 써있으면 Pro 입니다.



    1. 이전글에서 알려준 "컴퓨터 관리"를 실행한다.

    [사용자]폴더를 선택하고 마우스 오른쪽 버튼을 누른다음 "새 사용자"를 클릭한다.

    (사용자 폴더를 선택한 뒤, 오른쪽 부분의 빈칸에서 마우스 오른쪽 버튼을 눌러도 된다.)







    - 사용자 이름:
    사용자 계정의 이름이다. 가족이 계정명을 까먹지 않도록 쉽게 정하자

    - 전체이름: 입력할 필요가 없다.

    - 설명: "이게 누구의 계정이더라?" 하고 까먹지 않기 위해서 짧게 설명을 넣어줘도 괜찮겠다.

    - 암호는 반드시 설정하자.(이전글에서 우리는 암호의 중요성을 좀 배우지 않았는가!)

    - "다음 로그온할 때 반드시 암호 변경"의 체크는 해제하고 "암호 사용 기간 제한 없음"을 선택.

    - [만들기]버튼을 누르면 사용자 계정이 생성된다.




    2. 이제 사용자 별로 폴더 및 파일에 대한 권한을 설정해보자.

    먼저 윈도우 탐색기(Explorer.exe)를 실행시킨다.

    윈도우 탐색기는 시작버튼 > 프로그램 > 보조프로그램 > 윈도우 탐색기를 클릭하면된다.

    (가끔 누군가가 친절하게 그놈을 끌어다가 바탕화면이나 작업표시줄에 놓는 경우도 있다.)

    * 윈도우 팁 한가지: 윈도우 탐색기의 단축키"윈도우키"+E 를 누르면 된다.

    * "윈도우 키"는 스페이스바 왼쪽의 ALT 키와 CTRL 키 사이에 있는 윈도우 로고가 찍힌 키다.

    윈도우 탐색기를 처음 보는 사람들을 위하여 간단하게 설명하겠다.


    윈도우 탐색기의 왼쪽부분은 모든 드라이브와 폴더를 나열한 부분이고, 왼쪽에서 드라이브나 폴더를 선택하면 오른쪽 부분에 그 드라이브나 폴더안의 내용들을 보여준다. 몇 번 해보면 뭔지 안다.

    윈도우 탐색기 왼쪽 부분에 보이는 드라이브나 폴더들을 보면, 아이콘 앞에 + 표시가 보일것이다. 이 표시는 해당 폴더나 드라이브 안에 또다른 폴더가 존재 한다는 뜻이다.

    그 + 표시를 클릭하면 - 표시로 바뀌면서 안에 들어있는 폴더목록을 쭉~~ 늘어 놓는다.

    이런 작업을 "폴더를 확장시켰다" 라고 말하기도 한다.

    - 설명 끝 -




    아무튼 윈도우 탐색기를 실행했으면 [내 컴퓨터] 안에 각각의 드라이브가 보인다.

    보통 로컬드라이브와 CD-ROM이 보인다. 로컬드라이브는 운영체제 설치시에 두개 이상으로 나눌 수 있는데, C, D 이런식으로 영문 이름이 붙게 된다. 그것들을 우리는 C드라이브, D드라이브 이렇게 부르기도 한다.(근데 "우리"가 누구지 -_-?)

    일단 C드라이브를 선택하고 마우스 오른쪽 버튼을 누른뒤 "등록정보"를 클릭한다.

    (XP 사용자들은 "등록정보"가 아니라 "속성"으로 보일것이다. 이전에 설명했으니 잘 기억하자.)

    등록정보창의 [보안] 탭으로 이동한다. 여기서 XP 사용자들은 주의를 해야 한다. 왜냐면, 별도의 폴더 설정이 없이는 그 [보안]탭이라는게 보이지 않기 때문이다.


    #XP에서는 폴더옵션을 수정하여 [보안]탭을 보이게 할 수 있다. 수정해보자.

    1. 윈도우 탐색기의 맨 위의 메뉴줄에서 [도구] 메뉴 안의 "폴더 옵션"을 클릭한다.

    2. [보기]탭으로 이동한다.

    3. "모든 사용자에게 동일한 폴더 공유 원한을 지정(권장)"이 체크되어 있을 것이다.

      내 생각엔 권장할만한게 아닌데 (권장) 이랜다. 킁. 체크를 해제하자.

    4. 이제 드라이브의 등록정보(속성)를 다시 누르면 [보안]탭이 보인다.




    위의 그림이 등록정보 창의 [보안]탭이다.

    "어?? [그룹 또는 사용자 이름] 부분이 나랑 다르네??" 라는 분들이 거의 전부일 것이다.

    아마도 여러분들의 보안탭에는 "Everyone" 이라는 놈 딱 하나만 보일것이다. 이것이 Windows 설치의 기본설정값이다.(보안에 좀 취약하다.) "Everyone"을 선택하고 [제거]해 버리자.

    그다음 [추가]버튼을 누른다.

    사용자 개체를 선택하라는게 보인다. Administrators 를 선택하여 [추가]버튼을 누른다.


    (주의! Administartor가 아니라 Administrators 다. 즉, 사용자가 아니라 그룹을 추가시킨것이다. 사용자 개체에서 아이콘 모양이 사람머리 하나이면 "사용자"이고 머리가 둘이면 "그룹"이다.왜 사용자가 아니라 그룹을 넣느냐면, 사용자를 넣으려면 여러번 추가해줘야 하니까 귀찮아서다.그러니까 그룹을 넣어서 그 그룹에 속한 모든 사용자가 자동 추가되도록 하는것이다.)

    (또 주의! Windows XP에서는 사용자 개체를 보여주지 않고 직접 써넣으라고 그런다. 건방지게..사용자 개체를 검색하여 선택, 추가하는 방법이 있지만 조금 복잡하니 그냥 입력하자.)


    그런다음 다시 [보안]탭에서 Administrators 를 선택하고 아랫부분에 보이는 "사용 권한"을 보자. "모든 권한"의 "허용" 부분을 체크하자. 그러면 자동으로 아래의 항목이 모두 체크된다.



    Administratos 그룹을 추가했으면 이제는 Users 그룹만 추가하면 된다. Users 그룹은 집안 식구들 이 사용자는 계정(아까 처음에 우리가 새로 생성한 그 계정들)이 기본적으로 속해지는 그룹이다.


    Users 그룹의 권한은 모든 권한을 줘도 상관없고 알아서 주고 싶은 권한만 따로 줘도 된다.


    (일단 C드라이브에 대해서는 모든 권한을 줘버리자. 그들도 나름대로 자기가 설치하고 싶은 프로그 램이 있을 수 있으니까. 만일 C드라이브에 쓰기권한이 없으면 프로그램 설치가 안되고, 그럴때마다 "내"가 일일이 설치해줘야 하는 번거로움이 생길 수 있다.)

    다 끝났으면 [확인]버튼을 누른다.

    지금까지의 [보안]설정은 모든 드라이브(C, D 등등)도 가능하고 폴더에서도 가능하다. 폴더를 선택하고 "등록정보"를 눌러 [보안]탭으로 들어간 뒤, 위와 같은 작업을 하면 된다.


    가족들이 보지말았으면 하는 그런 것들은 따로 폴더를 만들어 넣어놓은다음, [보안]탭에서 내계정만(또는 Administrators 그룹) 남기고 다른 계정은 모두 제거해 버리면 된다.

    이런 보안 설정은 Administrators 그룹에 속한 사용자들만이 가능하다. Users 이하의 그룹에 속한 사용자들은 이런 설정작업을 하지 못한다.

    #주의! 폴더의 보안 설정을 바꾸다 보면 "부모로 부터 권한을 상속받아서 ~~ 할 수 없다" 라는 경고창이 뜨게 된다.

    이런 경우에 대한 설정과 좀 더 자세한 설명은 "PC 보안 PART ii - 폴더 접근 계정 및 그룹 설정 ②" 에서 하기로 하겠다.


    내용출처 : [직접 서술] 블로그 집필 - SECU & HACK
    (출처 : '[Windows] - 폴더 접근 계정 및 그룹 설정 ①' - 네이버 지식iN)

    Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:28
    이번에는 "그룹 정책"에 대해서 배워보자.

    Windows XP를 사용하는 PC방에서 제어판, 작업관리자등의 관리 프로그램을 사용할 수 없거나 기타 다른 응용프로그램의 설치가 안되는 것을 경험한 분들이 꽤 있을 것이다.

    이것을 "그룹 정책"에서 설정해 줄 수가 있다. (모든 정책 설정 및 수정은 "관리자 권한"이 있어야만 가능하다. 괜히 PC방에서 그룹 정책을 바꾸려고 하지 말자. 어차피 그룹 정책 조차 사용할 수 없을 테니까.)


    1. 그룹 정책

    시작 > 실행에서 gpedit.msc 를 입력하여 그룹 정책 창을 띄운다.


    그룹 정책은 크기 "컴퓨터 구성"과 "사용자 구성"으로 되어있는데, 컴퓨터 구성은 이전글에서 말한 "로컬 보안 정책"항목도 들어가 있다. 만일 이전에 계정 정책을 적용한 분들은 그룹 정책의 로컬 보안 정책에서도 적용이 되어 있음을 확인할 수 있다.

    컴퓨터 구성에서는 시스템과 관련된 서비스들을 제어할 수 있다. 이 부분도 역시 매우 깊이가 있으므로 여기서는 "사용자 구성"에서 필요한 몇 가지 부분만 다루도록 하겠다.

    A. 제어판의 엑세스 금지 설정

    사용자 구성 > 관리 템플릿 > 제어판을 선택하면 아래 그림과 같은 항목들을 볼 수 있다.




    "제어판의 엑세스 금지" 항목을 더블클릭하자.

    [설정]탭에서 "사용"을 선택한 다음 [확인]버튼을 누른다.



    여기서 한가지 잘 이해해야 할 것은, "사용""사용 안함"의 뜻이다. "사용"을 선택하면 제어판을 이용하지 못하는 것이고, "사용 안함"은 제어판을 이용할 수 있는 것이다.

    항목의 기능이 "제어판을 엑세스 하지 못하게 하는 기능"이므로, 이 기능을 "사용"해야만 일반 사용자들이 제어판을 실행하지 못하게 할 수 있다.  "사용"이라고 해서 제어판을 사용할 수 있는게 아니다. 모든 항목들이 다 이러하므로 절대로 헷갈려서는 안된다.

    이렇게 설정 하면 [시작버튼]에서는 제어판 항목이 사라져서 보이지 않게 된다. 그러나 윈도우 탐색기에서는 제어판 항목이 보이는데, 이 제어판을 클릭하게 되면 아래와 같은 경고창이 뜨면서 엑세스가 거부된다.







    B. 지정된 제어판 애플릿 숨기기 & 지정된 제어판 애플릿만 표시


    제어판에서 일부 기능만 사용할 수 있도록 설정하는 것도 있다. 지정된 제어판 애플릿 숨기기 또는 지정된 제어판 애플릿만 표시 항목이 바로 그것이다. 위 두 놈중 어느 하나만 설정해주면 되겠다.


    - 지정된 애플릿 숨기기: 모든 제어판의 항목을 사용할 수 있도록 하되, 이 항목에 선택되어진 놈들만 안보이도록 하여 사용하지 못하게 하는 항목

    - 지정된 애플릿만 표시: 모든 제어판의 항목을 안보이도록 하여 사용하지 못하게 하되, 이 항목에   선택되어진 놈들만 보이도록 하여 사용할 수 있게 하는 항목


    사용가능하게 할 항목이 많고 숨길 항목이 적다면 "지정된 애플릿 숨기기"에 설정하는게 편하고, 반대로 사용하게 할 항목이 적고 숨길 항목이 많다면 "지정된 애플릿만 표시"에 설정하는게 편하다.


    당 항목을 더블클릭하여 "사용"을 선택한 다음 [표시...] 버튼을 누르면 세부 항목을 입력할 수 있도록 창이 하나 뜬다.







    제어판에서 숨기거나 표시할 항목의 이름을 직접 입력하면 되겠다.




    이 항목을 설정하면 해당 항목이 제어판에서 사라져 보이지 않게 된다.


    C. 작업 관리자(CTRL+ALT+DEL) 금지


    작업관리자에 대한 접근 금지도 가능하다.

    관리 템플릿 > 시스템 > Ctrl+Alt+Del 옵션을 선택하여 "작업 관리자 제거" 항목을 "사용"하도록 설정하면 작업관리자 실행시 아래와 같은 경고창을 띄우고 작업을 거부하게 된다.




    자세한 설명은 여기까지만 하도록 하겠다.

    이 그룹 정책은 얼마든지 수정이 가능하기 때문에 이것저것 해봐도 무방하다. 뭔가 오류가 생기면 다시 원래대로 돌려놓으면 되니까. 다만 "로컬 보안 정책"은 시스템 로그온이 거부되기 때문에 자칫 잘못 설정하면 원복이 불가능 하다. 뭐 물론 도스모드로 부팅하여 시스템 복원 명령어를 사용하면 되긴 하지만.

    한가지 더 당부할 것은, "사용"과 "사용 안함"을 잘 이해해야 한다는 것이다.


    내용출처 : [기타] 블로그 집필 - SECU & HACK
    (출처 : '[Windows] - 보안 정책 설정 ②' - 네이버 지식iN)

    Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:24

    Windows NT 이상의 버전에서는 "계정 정책"을 사용한다는 것을 우리는 배웠다. Windows 에서 사용되는 "계정 정책"으로, Windows 98, ME 버전에서는 절대 하지 못했던 일들을 할 수 있게 되었다. "사용자 계정에 따른 권한 설정"이 바로 그것이다.

    그리고 이 계정 정책으로 인해 "로컬 보안 정책"도 적용되게 되었다. (보안 정책이 없는 계정 정책은 전혀 아무런 의미도 없기 때문이다.)

    이번 글에서는 이 "로컬 보안 정책"의 "계정 정책"에 대해서 배워보자.

    로컬 보안 정책에는 "계정 정책", "로컬 정책", "공개키 정책" 등등이 있는데 이중에서 "계정 정책"이외의 나머지 정책들은 매우 심도있는 정책이므로 다루지 않겠다. 이곳에서 다루는 컴퓨터 보안은 Professional을 위한것이 아니라, 일반 인터넷 사용자들을 위한 것이기 때문에.

    사실 "서버"를 운용하는 시스템이라도 "계정 정책"만 적용하면 로컬에 대한 보안 정책은 90%가 적용된 것이다.


    1. 로컬 보안 정책

    시작버튼 > 관리 도구 > 로컬 보안 정책을 실행한다.
    (또는 시작 > 실행에서 secpol.msc 를 입력한다.)


    계정 정책, 로컬 정책, 공개 키 정책, 소프트웨어 제한 정책, 로컬 컴퓨터의 IP 보안 정책의 5가지 정책들이 보인다. 이중에서 우리가 배울것은 "계정 정책"이므로 계정정책을 선택한다.

    계정 정책을 선택하면 오른쪽 프레임에 암호 정책과 계정 잠금 정책이 보인다.

    암호 정책은 사용자 계정의 암호를 설정할 때 영향을 미치게 될 정책이며, 계정 잠금 정책은 계정 로그인을 실패할 때 영향을 미치게 될 정책이다.

    이 중에서 중요한 것은 계정 잠금 정책이다. 암호 정책도 중요하긴 하지만, 여기서는 계정 잠금 정책만을 심도있게 다루겠다.

    계정 잠금 정책을 더블 클릭하면 다음의 3가지 항목이 나온다.



    A. 계정 잠금 기간

    컴퓨터 부팅 후, 암호를 넣어 로그인을 시도할 때, 암호가 틀릴경우 계정을 사용하지 못하도록 설정할 수 있는데 계정을 사용하지 못하게 할 시간을 설정할 수 있다. 이 값을 30분으로 설정하게 되면, 암호가 틀릴경우 30분동안 계정 로그인을 절대 할 수가 없다. 맞는 암호를 넣는다고 해도 30분이 지나지 않으면 로그인을 할 수 없다. (이 항목은 계정 잠금 임계값을 먼저 설정해야만 적용할 수 있으며, 계정 잠금 임계값을 설정할 때, 기본값으로 30분이 설정된다.)

    B. 계정 잠금 임계값

    이 항목은 계정에 대한 암호를 틀리는 것을 몇 번까지 봐주겠는냐 하는 것이다. 만일 "1"로 설정하게 되면 한번만 암호가 틀려도 계정 잠금 기간의 시간이 적용되어 버린다. 사람은 늘 실수를 하게 되므로 충분한 로그온 시도를 적용해야 한다.

    이 계정 잠금 임계값을 설정해야 하는 이유는 "추측에 의한 Password 크래킹"을 방지하기 위한 것이다. 따라서 정상적인 사용자가 암호를 잠깐 헷갈리는 것을 감안해줘야 한다.

    필자는 20회로 설정해 두었는데, 주기적으로 암호를 변경하다보니 암호를 자주 헷갈려하기 때문이 다. 실제로 계정 잠금 임계값을 5회 적용했더니, 그만 변경한 암호가 헷갈려서 계정이 잠겨버리는 일이 발생했었다.(그 때는 계정 잠금 시간도 1시간으로 설정했었기 때문에 아주 곤욕을 치뤘었다.)

    최소 10회로 설정하면 적당하겠다.

    C. 다음 시간 후 계정 잠금 수를 원래대로 설정

    컴퓨터는 항상 로그온 시도를 기억하고 있어야 한다. 그래야만 사용자가 몇번이나 틀렸는지를 계산하고 있다가, 계정 잠금 임계값에 도달할 경우 계정 잠금 기간을 적용할 수 있기 때문이다. 

    그런데 이 로그온 실패 횟수를 계속 누적시키게 될 경우, 하루에 1번 암호를 실패한다고 가정하면, 20일에는 계정이 잠겨버리게 될 것이다. 따라서 이 로그온 실패 횟수를 다시 0으로 해야만 하는데 그 0으로 되돌리는 시간을 설정하는 것이다.

    즉, 로그온 실패 횟수를 얼마의 시간동안 기억하고 있을지를 설정하는 것이다. (이 항목도 계정 잠금 임계값을 먼저 설정해야만 적용할 수 있으며, 계정 잠금 임계값을 설정할 때, 기본값으로 30분이 설정된다.)



    #참고

    Windows XP에서는 설정과 동시에 정책이 적용된다. 그러나 Windows 2000 에서는 정책을 수정하고 난 다음에는 "다시 로드"를 해줘야만 적용이 된다.



    [주의!]


    로컬 정책을 포함한 다른 정책은 관련 지식이 없는 상태에서 적용하면 안된다. 각 항목의 설명이 적혀있고 그것이 무엇을 뜻하는지 알것같다고 해도 절대 손대지 말것을 경고한다. 정책으로 인해 컴퓨터를 사용하지 못하게 될 수도 있기 때문이다.


    내용출처 : [기타] 블로그 집필 - SECU & HACK
    (출처 : '[Windows] - 보안 정책 설정 ①' - 네이버 지식iN)

    Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:21

    Command 모드에서 netstat를 사용하여 PC내의 악성 코드 여부를 확인할 수도 있다.

    1. [시작버튼] > [실행]을 눌러서 cmd 라고 입력하여 Command 창을 띄운다.
    <참고: CTRL+R 을 누르면 [실행]창이 바로 뜬다.>
    <또 참고: Windows 98에서는 cmd 가 아니라 command 라고 해야 command 창이 나온다.>

    2. netstat   -an
    명령어를 치면 아래 그림과 같은 메시지가 출력된다.


    앞에 보이는 IP주소(Local Address)는 로컬시스템(내 PC)의 IP주소이며 뒤의 IP주소(Foreign Address)는 나와 네트워크로 연결이 이루어진 시스템의 IP주소이다.  (IP뒤의 ":숫자" 들은 포트 번호이다.)netstat 명령어는 현재 시스템과 네트워크로 연결이 이루어진 상태를 보여주는 명령어다.

    자, 이제 분석 방법이다!(FPORT 블로그에서는 존댓말을 썼었는데 왜 갑자기 반말쓰냐고 욕하지는 마세요;)

    먼저 위 메시지의 맨 끝 필드인 State 필드를 보자. ESTABLISHED는 연결되어있는 상태를 말하며 CLOSED는 이미 연결이 끊어졌음을 말한다. LISTENING은 현재 시스템에서 열려있는 포트를 말한다.

    일단 LISTENING 이라고 되어있는 놈들은 본다. IP주소는 0.0.0.0으로 된 놈들이 많고 내 IP주소 몇개 안될것이다.

    <참고: 0.0.0.0(네트워크 IP) - 이놈을 인식하지 못하면 인터넷을 못한다.>

    <또 참고: 127.0.0.1(LocalHost IP) - 이놈은 자기를 스스로 가리킬때 사용하는 주소이다.>

    Local Address 필드의 IP는 중요하지 않다. 어차피 거기는 내 컴퓨터의 정보만 나오니까. 중요한것은 LISTENING으로 되어있는, 다시말하면 "열려있는 포트"번호이다.

    내 컴퓨터에 몇번 포트들이 열려있는지 살펴본 후에, 만일 그 포트로 접속한 놈이 있다면 90%는 뭔가 이상한 거라고 생각하면 된다.

    예를 들어,

    0.0.0.0:445           0.0.0.0:0               LISTENING
    .                         .                         .
    .                         .                         .
    .                         .                         .
    150.2.50.14:445     68.235.32.153:4461  ESTABLISHED


    이렇게 보였다고 하자, 445 번 포트(0.0.0.0:445)가 현재 열려(LISTENING)있음을 알 수 있고,

    아래에는 내 445번 포트로(150.2.50.14:445) 웬 68.235.32.153 이라는 놈이 접속(ESTABLISHED)했다는 것이 확 드러났다.

    일반 개인 컴퓨터 이므로 누가 내 컴퓨터로 들어올일은 거의 없다! (P2P로 내 컴퓨터의 폴더가 공유되어 있다면 몰라도..)

    아무튼 이런식으로 분석을 하면 되겠다.

    그 외의 것들은 죄다 내가 상대방 컴퓨터로 접속한것을 나타내는 것이기 때문에 무시해도 된다. 물론, Reverse 해킹 방식이 있기는 하지만, 그걸 개인 컴퓨터에 적용할 정도로 무식한 크래커는 없을것이다.

    내용출처 : [직접 서술] 직접 서술
    (출처 : '[PC보안]  Netstat 명령어로 점검' - 네이버 지식iN)

    Posted by theYoungman
    engineering/Network Eng.2006. 8. 7. 13:08

    정보를 주고받을때 중요한 점은
    정보가 오류없이 안전하게 전달되는가? 라는 점이다.

    정보를 전송할때.. Digital 전송이 Analog 전송보다 오류체크에 유리한점은..
    이진형태로 전송되기때문에 오류제어를 위한 응용에 유리하다.

    보통.. 어떤 정보의 뒤에 체크디지트의 형태로 하나의 숫자를 추가하여
    오류가 있는지 없는지를 판단한다. 이때 체크를 위해서 모듈러연산이 사용된다.
    체크디지트는 오류검출코드라고 보면 된다.

    실생활에서 사용되는 것으로는.. 상품을 관리하는곳에서 많이 쓰인다.

    EAN코드는.. 주로 공산품에 사용되는것으로..
    ㅇㅇㅇ(국가번호)-ㅇㅇㅇㅇ(제조자코드)-ㅇㅇㅇㅇㅇ(상품코드)-ㅇ(체크디지트)
    의 형태로 이루어진다.

    홀수번째에는 가중치 1을 주고, 짝수번째는 가중치 3을 주어
    코드와 가중치를 곱하여 더한다. 그 합이 10의 배수가 되는 것이 체크디지트가 된다.


    ISBN코드는 책에 쓰이는데..
    ㅇㅇ(국가번호)-ㅇㅇㅇㅇ(출판사코드)-ㅇㅇㅇ(서적코드)-ㅇ(체크디지트)
    의 형태로 이루어진다.

    출판사코드와 서적코드는.. 가변적이다. 단, 합쳐서 7자리는 고정이다.

    첫번째자리는 10, 두번째자리는 9, 8, 7 의 가중치를 순서대로 주고..
    그 코드와 가중치의 곱의 합이 11의 배수가 되도록 하는 것이 체크디지트가 된다.

    신용카드에서 체크디지트가 사용되는데.. 카드사마다 다른 방식의 체크디지트를 사용한다.


    실제로 옆에 있는 책을 예를 들어서 검사해봐도 될것이다.


    실생활의 예를 들었지만, 이것은 암호화 혹은 오류검출의 시작에 불과한 것이고..

    이런 오류검출의 응용이 IT분야에도 전반적으로 사용이 되므로..

    기본적인 지식으로 알아두면 좋을것이다.

    내용출처 : [직접 서술] Na 

    (출처 : '정보의 전달과 오류체크' - 네이버 지식iN)

    Posted by theYoungman