카테고리 없음

2011년 9월28일 Facebook 이야기

Historymaker731 2011. 9. 28. 23:59
  • 네이버가 보안인력이 최고??? 내 앞에서 웃기는 소리하지마라.. 고작 100명으로 1300만명 관리가 가능하다고 생각해??
  • 사직서 제출할테니 어디 함 해봐 니가 직접해
  • 개새야 내 앞에서 IT 떠들지마. MS-dos 안해 봤으면 말도 꺼내지마
  • 사직서 이미지 - 한글파일로 제출하면 그만..
  • Korea IT Fucking~!!!!
  • 특정 *.Dll 파일이 지워지는 건 소스를 보지 않는 이상 내가 어케 알아??? ㅡㅡ+++
  • 이번주내에 java File 외 모든 소스 파일 보안 체크, 본부나 만든 사람이 다 해 볼 것. 아님 나한테 모든 소스 가지고 오산까지 날라 오던가?
  • 그리고 사용자 실수는 지난번 강의 때 두눈으로 보고도 캡쳐하라는게 말이 돼???
  • FPGA 로직..NI사..
  • http://korea.ni.com/
    차라리 이걸 팔고 말지..
    korea.ni.com  
    한국내쇼날인스트루먼트의 공식 웹사이트입니다. 제품 정보를 비롯한 서비스, 행사 관련 안내 정보를 확인하시기 바랍니다. 
    image
  • 무인 탱크나 만들어라..;;
  • 리눅스 - aliases 파일 설정 예제

    사용자 별명을 설정하는 aliases 파일 설정 예제

    # vi /etc/aliases

    master: root, user00, root@kiwi.gcc.go.kr

    # newaliases

    /etc/aliases.db 파일을 생성하는 명령이다.

     

    일반계정 사용자가 자신의 메일을 포워딩하기 위해 설정하는 .forward 파일

    설정예제

    # vi $HOME/.forward

    user00@kiwi.gcc.go.kr

    수신되는 모든 메일을 kiwi 시스템의 user00사용자에게로 포워딩된다.

    Sendmail은 기본적으로 사용자 계정 디렉토리와 그 상위 디렉토리에 대한 Group에

    쓰기 권한이 있으면 .forward파일을 읽지 않는다.



  • 리눅스 - 사용 용어
    ps - 프로그램 정보 확인하기
    kill - 프로세스 죽이기
    ifconfig - 주소 알기
    route - 라우팅 테이블확인, 경로 확인
    netstart - 네트워크 정보 확인
    traceoute - 목적지까지 경로 확인
    man man - 명령 형식 사용법
  • 정리된 리눅스 명령어[옵션포함]

    finger [op] [user[@host]]

    이용자 정보를 표시한다. finger 명령은 인터넷에 연결된 다른 컴퓨터에도 쓸 수 있다. 때로 크래커들이 이용한다.
  • 버퍼 오버플로우 - 버퍼 오버플로우(buffer overflow) 또는 "버퍼 오버런"(buffer overrun)

    버퍼 오버플로우

    버퍼 오버플로우(buffer overflow) 또는 "버퍼 오버런"(buffer overrun)은 메모리를 다루는 데에 오류가 발생하여 잘못된 동작을 하는 프로그램 취약점이다. 컴퓨터 보안과 프로그래밍에서 이는 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것이다. 벗어난 데이터는 인접 메모리를 덮어 쓰게 되는데 다른 데이터가 포함 되어 있을 수도 있는데, 손상을 받을 수 있는 데이터는 프로그램 변수와 프로그램 흐름 제어 데이터도 포함된다. 이로 인해 잘못된 프로그램 거동이 나타날 수 있으며, 메모리 접근 오류, 잘못된 결과, 프로그램 종료, 또는 시스템 보안 누설이 발생할 수 있다.

    버퍼 오버플로우가 코드를 실행시키도록 또는 프로그램 작동을 변경시키도록 설계된 입력에 의해 촉발될 수 있다. 따라서 이는 많은 소프트웨어 취약점의 근간이 되며 악의적으로 이용될 수 있다. 경계 검사로 버퍼 오버플로우를 방지할 수 있다.

    버퍼 오버플로우는 보통 데이터를 저장하는 과정에서 그 데이터를 저장할 메모리 위치가 유효한지를 검사하지 않아 발생한다. 이러한 경우 데이터가 담긴 위치 근처에 있는 값이 손상되고 그 손상이 프로그램 실행에 영향을 미칠 수도 있다. 특히, 악의적인 공격으로 인해 프로그램에 취약점이 발생할 수도 있다.

    흔히 버퍼 오버플로우와 관련되는 프로그래밍 언어는 C와 C++로 어떤 영역의 메모리에서도 내장된 데이터 접근 또는 덮어쓰기 보호 기능을 제공하지 않으며 어떤 배열에 씌여지는 데이터가 그 배열의 범위 안에 포함되는지 자동으로 검사하지 않는다.

    목차

    1 기술적인 설명

    1.1 기본 예제

    2 이용

    2.1 스택 기반 이용

    2.1.1 스택 기반 이용 예

    2.2 힙 기반 이용

    2.3 이용당하는 것을 막는 장벽

    2.4 이용의 실제

    2.4.1 NOP 썰매 기법

    2.4.2 레지스터에 저장된 주소로 건너뛰기

    3 보호 대응 수단

    3.1 프로그래밍 언어 선택

    3.2 안전한 라이브러리 사용

    3.3 버퍼 오버플로우 보호

    3.4 포인터 보호

    3.5 실행 공간 보호

    3.6 주소 공간 배치 난수화

    3.7 심층 패킷 조사

    4 이용의 역사

    5 예제 소스 코드

    6 같이 보기

    7 참조

    8 외부 링크

     

    [편집] 기술적인 설명

    버퍼 오버플로우는 불충분한 바운드 확인에 의해 버퍼에 쓰인 데이터가 버퍼에 이미 할당된 근접한 메모리 주소에 있는 데이터 값을 오염시킬 때 발생한다. 대부분 이는 문자열을 하나의 버퍼에서 다른 버퍼로 복사할 때 발생한다.

    [편집] 기본 예제

    아래의 예제에서, 프로그램은 메모리에서 인접해있는 두 아이템을 정의하였다: 8 바이트 길이 스트링 버퍼, A. 그리고 2 바이트 정수형, B. 우선, A 는 8바이트 모두 숫자 0값만 포함하고 B는 숫자 3을 포함한다. 문자들은 1바이트 크기이다.

    A B

    0 0 0 0 0 0 0 0 0 3

    이제, 프로그램은 문자열 "excessive"를 A 버퍼에 저장한다. 한 바이트짜리 0값이 스트링의 끝임을 알리기 위해 따라온다. 스트링의 길이를 확인하지 않음으로 B의 값을 덮어쓴다.

    A B

    'e' 'x' 'c' 'e' 's' 's' 'i' 'v' 'e' 0

    비록 프로그래머가 B가 바뀌는 것을 전혀 의도하지 않았다 하더라도, B의 값은 문자열의 한 부분을 구성하는 숫자로 바뀌었다. 이 예제에서 ASCII를 사용하는 빅 엔디언 시스템에서 "e" "0"는 숫자 25836가 될 수 있다. B가 프로그램이 정의한 유일한 다른 변수였다면, B의 끝을 지나가는 긴 스트링을 쓰는 것은 세그먼트 오류, 프로세스 종료와 같은 오류를 발생시켰을 것이다.

    [편집] 이용

    버퍼 오버플로우 취약점을 이용하는 기술은 구조, 운영체제, 메모리 영역에 따라 다르다. 예를 들어 힙 heap (동적 메모리 할당에 사용됨) 을 이용하는 방법은 함수 호출 스택을 이용하는 방법과 매우 다르다.

    [편집] 스택 기반 이용

    기술적 성향을 가진 악의적 사용자가 스택 기반 버퍼 오버플로우를 아용하여 프로그램을 아래와 같이 조작할 수 있다:

    스택에 가까운 지역 변수를 덮어씀으로써 프로그램의 거동을 공젹자에게 혜택을 주는 방향으로 바꾼다.

    스택 프레임안의 귀환 주소를 덮어쓴다. 함수가 귀환하면 실행이 공격자가 지정한 귀환 주소로부터 재개되는데 보통 사용자 입력으로 채워진 버퍼이다.

    함수 포인터 또는 예외 취급기 exception handler를 덮어씀으로써 이후에 실행되는 부분을 가로챈다.

    트램폴라이닝 trampolining이라 불리는 방법을 사용하면, 사용자가 지정한 데이터의 주소를 모르더라도, 레지스터에 그 주소가 저장되어 있다면, 실행 흐름을 사용자 제공 데이터로 도약하도록하는 어떤 실행코드의 주소로 귀환 주소를 덮어쓸 수 있다. 위치가 레지스터 R에 저장되어 있다면 jump R이나 call R과 같이 R에 저장되어 있는 주소로 건너뛰는 작동코드 opcode 로 사용자 제공 데이터가 실행되도록 할 수 있다. 적당한 작동코드 또는 바이트의 위치는 DLL 이나 실행 file 자체 안에서 찾을 수 있다. 그러나 작동 코드의 주소는 전형적으로는 어떠한 무효 문자도 포함할 수 없고, 이러한 작동 코드의 위치는 응용 프로그램마다, 운영체제의 판본에 따라 달라질 수 있다. 메타스플로잇 프로젝트는 그러한 적당한 작동코드의 데이터베이스로 윈도우즈 운영체제에 관한 것이 나열되어 있다.

    [편집] 스택 기반 이용 예

    아래의 예에서, "X"는 프로그램이 실행될 때 스택에 있게 되는 데이터이다; 프로그램은 그 다음 작은 양의 저장공간만 필요한 함수 "Y"를 호출한다. 그리고 "Y"는 그 다음 많은 버퍼를 필요로 하는 "Z"를 호출한다.

    Z Y X

                 : / / /

    만약 함수 Z가 오버플로우를 발생시키면, 그것은 함수 Y나 주 프로그램에 포함된 데이터를 덮어 쓸 수도 있다:

    Z Y X

    . . . . . . . . / /

    이것은 대부분의 시스템에서 현재의 프로세스가 호출되기 전 실행되고 있던 프로그램 부분의 위치인 반환값을 스택이 갖고 있기 때문에 특히나 심각하다. 함수가 끝날 때 임시 저장소는 스택에서 제거되고 실행은 반환 주소로 되돌아 간다. 그런데 반환 주소를 버퍼 오버플로우가 덮어쓰면 어떤 다른 위치를 가리킬 것이다. 처음 예제에서와 같은 버퍼 오퍼플로가 우연히 발생하는 경우 거의 틀림없이 쓸모없는 위치일 것이다. 어떠한 프로그램 명령어 위치가 아니고, 프로세스는 망가질 것이다. 하지만 악의적인 공격자가 시스템 보안과 충돌할 수 있는 임의 위치로 반환 주소를 바꿀 수 있다.

    [편집] 힙 기반 이용

    힙 데이터 영역에서 일어나는 버퍼 오버플로우를 힙 오버플로우라 부르며 스택 기반 오버플로우와는 다른 방법으로 이용할 수 있다. 힙 상의 메모리는 동적으로 응용프로그램에 의해 실행시간중 할당되고 보통 프로그램 데이터를 보관하고 있다. 이용하는 방법은 이 데이터를 특정한 방법으로 오염시켜 응용 프로그램이 연결 리스트 포인터 linked list pointer 등과 같은 내부 자료 구조를 덮어쓰게 한다. 기본적인 힙 오버플로우 기술은 동적 메모리 할당 연결(malloc 상위 수준 데이터)를 덮어씀으로써 프로그램 함수 포인터를 조작한다. 마이크로소프트 JPEG GDI+ 취약점은 힙 오버플로우도 컴퓨터 사용자에 위험이 될 수 있다는 예이다.

    [편집] 이용당하는 것을 막는 장벽

    읽히거나 실행되기 전에 버퍼를 조작하면 이용하려는 시도를 막을 수도 있다. 이러한 조작은 이용당할 위협을 완화시켜줄 수는 있지만 불가능하게 만들지는 못한다. 조작에는 대문자로 또는 소문자로 변환, 제어 부호 제거, 숫자 영문자 제거 등이 포함된다. 이러한 방지 수단을 회피하는 기술도 존재한다: 숫자 영문자 코드, 다형성 코드, 자체 수정 코드, libc 귀환 공격 등. 같은 방법을 침입 감지 시스템에 의한 피탐지를 회피하는 데도 사용할 수 있다. 어떤 경우에는, 유니코드 변환의 경우도 포함되지만, 서비스 거부만 가능한 것으로 취약점의 위협이 잘못 표현되었지만 사실은 임의 코드의 원격 실행이 가능할 수도 있다.

    [편집] 이용의 실제

    실세계 이용에서는 다양한 이슈를 극복해야 공격을 신뢰성 있게 수행할 수 있다. 이러한 요소에는 주소에서의 무효값 바이트, 셸 코드 위치 가변성, 환경간 상이성, 그리고 다양한 대응수단이다.

    [편집] NOP 썰매 기법

    NOP 썰매 기법은 가장 오래되고 가장 널리 알려진 스택 버퍼 오버플로우 공격 기법이다. 버퍼의 정확한 주소를 찾는 문제를 해결하는 것으로, 표적 영역의 크기를 효과적으로 증대시킨다. 이를 위하여 훨씬 큰 영역의 스택을 NOP 기계어 코드 (컴퓨터가 이 명령을 읽으면 그 클럭 싸이클에는 아무 일도 하지 않는다)로 오염시킨다. 공격자 제공 데이터 끝, 즉 NOP 명령어 이후에 버퍼의 최상위 위치, 셸 코드가 있는 곳으로 상대적 jump 명령어를 둔다. NOP 명령어의 모음이 "NOP 썰매"라고 불린다. 왜냐하면 귀환 주소를 덮어 쓸 때 NOP 영역 내의 주소값 어디를 써도 결국 NOP 명령어들을 따라 "미끄러져" 최후의 상대 jump로 실제 악성 코드에 도달하기 때문이다. 이 기법은 공격자가 상대적으로 작은 크기의 셸 코드의 위치 대신 스택에서 NOP 썰매의 위치를 추정하면 된다.

    이 기법이 인기 있기 때문에 많은 침입 방지 시스템 업체에서 이러한 NOP 기계어 명령어 패턴을 탐색하여 사용중인 셸 코드를 검출할 것이다. 중요한 것은 NOP 썰매는 반드시 전통적인 NOP 기계어 코드만 담는 것은 아니며 어떤 명령이라도 셸 코드가 실행될 수 없을 만큼 기계 상태를 해치지 않으면 하드웨어로 지원되는 NOP자리에 사용할 수 있다. 결과적으로, 공격자가 NOP 썰매를 셸코드 실행에 사실상 지장이 없는 임의로 선택한 명령어로 채우는 관행이 널리 퍼지게 되었다.

    한편, 이 방법이 어떤 공격이 성공적일 확률을 크게 높이는 반면, 문제가 없는 것은 아니다.

    이 기법을 이용한 공격이라도 여전히 어느 정도 운에 의존, 스택 상의 거리 offset를 추정하여 NOP-썰매 영역에 들어가게 해야 한다. 부정확하게 추정하면 보통 표적 프로그램이 깨지고 시스템 관리자에게 공격자의 활동을 경보하게 된다.

    또 한가지 문제가 될 수 있는 경우는 효과적인 NOP-썰매가 할당받을 수 있는 메모리에 비해 너무 큰 경우이다. 이것이 문제가 될 수 있는 경우는 할당된 버퍼 크기가 너무 작고 현재 스택의 깊이가 너무 얕을 때(즉, 현재 스택 프레임의 끝으로부터 시작점까지의 공간이 얼마 되지 않았을 때)이다. 그 문제점에도 불구하고 NOP-썰매는 주어진 플랫폼, 환경, 상황에 따라 유일하게 작동하는 방법으로 아직도 중요한 기법이다.

    [편집] 레지스터에 저장된 주소로 건너뛰기

    레지스터로 건너뛰기 jump to register 기법은 NOP-썰매와 같은 추가 공간이나 스택 위치 offset을 추정하지 않아도 잘 작동한다. 전략은 복귀 포인터를 덮어써서 통제된 버퍼, 즉 셸코드를 담고 있는 레지스터의 위치로 프로그램이 건너뛰게 만드는 것이다. 예를 들어 레지스터 A가 어떤 버퍼의 시작점을 담고 있다면, 이 레지스터를 오퍼랜드 operand로 삼은 어떠한 건너뛰기 또는 호출로 실행 흐름의 제어권을 얻을 수 있다. 실전에서는 어떤 프로그램이 의도적으로는 어떤 특정 레지스터에 저장된 주소로 건너뛰는 명령을 포함하지 않을 수도 있다. 전통적인 해법은 어떤 의도되지 않은 적당한 작동코드 opcode 사례를 프로그램 메모리 어딘가 고정된 위치에서 찾는 것이다. 예를 들면, 뜻하지 않게 i386 jmp esp 명령이 포함된 경우가 ntdll.dll 안의 DbgPrint()함수에 있었다. 이 명령의 작동 코드는 FF E4이다. 이 연속 두 바이트 패턴이 call DbgPrint 명령에서 1Byte 떨어진 곳 주소 0x7C941EED에 나타났다. 공격자가 프로그램의 귀환 주소를 이 주소로 덮어 쓰면, 프로그램이 처음에는 0x7C941EED로 건너뛰어 실행 코드 FF E4를 jmp esp 명령으로 인식하여 스택의 정상 위치로 jump, 공격자의 코드를 실행할 것이다. 이 기법이 가능하다면 취약성의 심각성이 상당히 증가한다. 이는 왜냐하면 이용이 충분히 신뢰성 있게 작동하여 공격을 자동화, 실행하면 가상적으로 성공을 보증할 수 있게 되기 때문이다. 이러한 이유로, 이 기법이 인터넷 웜에서 가장 흔히 버퍼 오버플로우 취약점을 이용하기 위해 사용된다. 이 방법은 또한 셸코드의 위치를 윈도우즈 플랫폼 상에서 덮어씌어진 귀환 주소 뒤에 위치하더라고 가능하다. 실행 코드는 주소 0x00400000에 기반하고, x86은 리틀 엔디안 구조이므로 귀환 주소의 최후 바이트는 반드시 무효값이 되고, 이것이 버퍼 복사를 마감하며 그 이후에는 아무 것도 씌이지 않는다. 이로 하여 셸코드의 크기는 버퍼의 크기로 제한되며, 지나친 규제가 될 수 있다. 동적 연결 라이브러리 DLL은 고위 메모리 (0x01000000 이상)에 저장되며 따라서 무효 바이트가 없는 주소를 가지므로, 이 방법은 무효 바이트 (또는 다른 허용 안되는 문자)를 덮어씌어진 복귀 주소에서 제거할 수 있다. 이런 식으로 사용되면, 이 방법은 때때로 DLL 프램폴라이닝이라고 불린다.

    [편집] 보호 대응 수단

    다양한 기법이 버퍼 오버플로우를 감지 또는 방지하기 위하여, 다양한 댓가를 지불하며 사용되어 왔다. 가장 신뢰성 있는 버퍼 오버플로우를 회피 또는 방지하기 위한 방법은 언어 수준에서 자동 보호를 사용하는 것이다. 이런 종류의 보호는, 그러나, 기존 코드에 적용할 수 없고, 때때로 기술적, 상업적, 또는 문화적 제한으로 취약한 언어를 요구한다.

    [편집] 프로그래밍 언어 선택

    프로그래밍 언어 선택은 버퍼 오버플로우 발생에 깊이 있는 영향을 미칠 수 있다. 2008년 현재, C와 그로부터 발전된 C++는 가장 인기 있는 언어들에 포함되며, 거대한 양의 소프트웨어가 이러한 언어로 작성되었다. C와 C++는 메모리상 어떤 부분에서도 데이터 접근과 덮어쓰기에 대한 내장 보호 기능이 없다; 더 구체적으로, 데이터가 어떤 배열 (버퍼의 구현)에 씌어지는 데이터가 그 배열의 범위 안에 씌어지는지 검사하지 않는다. 그러나 표준 C++ 라이브러리는 데이터를 안전히 저장하는 많은 방법을 제공하고, C언어에서 버퍼 오버플로우를 회피하기 위한 기술도 존재한다. 장기간 작동시키며 안정성을 유지해야 하는 프로그램을 작성해야 한다면 보다 데이터 타입과 오버플로우 검사가 엄격한 C#과 Java를 사용할 수 있다.

    많은 다른 프로그래밍 언어는 실행시간 검사를 제공하고, 어떤 경우에는 심지어 컴파일 시 검사하여 C 또는 C++가 데이터를 덮어쓰고 계속하여 더 많은 명령을 실행하여 잘못된 결과가 프로그램을 깨뜨릴 수도 있는 경우 경고 또는 예외를 제기할 수도 있다. 그러한 언어의 예는 애이다, 리슾, 모듈라-2, 스몰톡, 오카믈 그리고 C에서 발전된 사이클론과 D 이다. 자바와 닷넷 바이트코드 환경도 경계 검사를 모든 배열에 대하여 요구한다. 거의 모든 인터프리터 언어는 잘 정의된 에러 조건에 신호를 보냄으로써 버퍼 오버플로우에 대항 보호할 것이다. 어떤 언어가 충분한 형 정보 type information을 제공하면 때때로 가능케 할것인지 불가능하게 할 것인지 정할 수 있게 해 준다. 정적 코드 분석은 다수의 동적 경계 검사를 제거할 수 있지만, 잘못 구현되거나 부적절한 case는 심각하게 성능을 저하시킬 수 있다. 소프트웨어 공학자는 반드시 조심스럽게 안전성과 성능 비용 사이의 조율을 고려하여 언어와 컴파일러 설정을 결정하여야 한다.

    [편집] 안전한 라이브러리 사용

    버퍼 오버플로우의 문제는 C와 C++언어에서는 일반적이다. 왜냐하면 이들 언어가 데이터 형을 보관 장소로서 버퍼의 저수준 표현상 상세를 노출시키기 때문이다. 버퍼 오버플로우는 반드시 따라서 버퍼 관리 코드안에서의 높은 수준의 정확성을 유지함으로써 회피되어야 한다. 오래전부터 표준 라이브러리 함수 중 경계를 검사하지 않는 함수의 사용을 피할 것이 권고되어 왔다: gets, scanf, strcpy 등. 모리스 웜은 핑거 데몬 안에서 호출되는 gets 함수를 이용하였다.

    잘 씌어지고 검사된 추상 데이터형 라이브러리는 경계 검사를 포함한 버퍼 관리를 중앙집중화하고 자동적으로 실시하여 버퍼 오버플로우 발생과 충격을 줄일 수 있다. 버퍼 오버플로우가 일상적으로 일어나는 언어의 두가지 주요한 기본 데이터 형은 문자열과 배열이다; 따라서 버퍼 오버플로우를 이러한 데이터 형에서 방지하는 라이브러리는 필요 영역 가운데 방대한 대다수를 담당해 줄 수 있다. 여전히 이러한 안전한 라이브러리를 사용하지 못한다면 버퍼 오버플로우와 다른 취약점을 낳을 것이다; 자연스럽게 라이브러러 자체의 어떤 버그도 잠재적인 취약점이 된다. "안전한" 라이브러리 구현은 "개선된 문자열 라이브러리", Vstr, 어원을 포함한다. 오픈 BSD 운영체제의 C 라이브러리는 strlcpy와 strlcat 함수를 제공하지만 이들은 전 안전 라이브러리 구현보다 더 제한되어 있다.

    2006년 9월 C 언어 표준 위원회 기술 보고서 24731이 공개되었다; 이는 표준 C 라이브러리의 문자열과 입출력 함수들에 기반하였으나 버퍼 크기 매개 변수를 추가로 가진 함수들을 명세하였다. 그러나 이런 함수들의 버퍼 오버플로우 방지 효력은 논란의 여지가 있다. 프로그래머가 일부러 함수 호출 마다 개입하여야 하는데 이는 더 오래된 표준 라이브러리 함수의 버퍼 오버플로우를 방지하게 만드는 것과 등가의 일이다.

    가능한 더 안전한 기능을 제공하는 함수를 사용하는 것도 방법이다. 예를 들어 문자열의 길이를 구하는 C 함수 strlen, wcslen 함수는 NULL 문자를 만날 때까지 계속 다음 메모리를 참조해 나가는 메커니즘으로 되어 있어서 원래의 문자열 끝에 NULL이 없으면 최악의 경우 메모리 영역 끝을 넘어서까지 메모리를 참조하려 시도할 것이다. 이 때에는 좀 더 개선된 함수 strlen_s나 wcslen_s 를 사용하여 참조할 최대 메모리를 제한 할 수 있다. 이 외에 기존의 문자열 함수 뒤에 _s가 붙은 이름의 함수를 사용하면 버퍼 오버플로우 문제를 개선할 수 있다. [1]

    [편집] 버퍼 오버플로우 보호

    버퍼 오버플로우 보호는 가장 일반적인 버퍼 오버플로우를 검출하기 위해 사용되며 함수가 귀환할 때 스택이 변경되었는지 검사한다. 변경되었다면 프로그램이 세그먼트 오류를 발생 시키며 중단된다. 그러한 시스템의 세가지 예가 gcc 패치인 립세이프 LibSafe, 스택 가드, 프로폴리스 이다. 마이크로소프트의 데이터 실행 방지 모드는 명백히 SEH 예외 처리기를 가리키는 포인터를 덮어쓰기로부터 보호한다. 더 강력한 스택 보호는 스택을 두가지로 나눔으로써 가능하다: 하나는 데이터용이고 다른 하나를 함수 귀환에 사용하는 것이다. 이러한 구분은 포스 프로그래밍 언어에 비록 안전을 위한 기능은 아니지만 채택되어 있다. 어쨌든, 이는 버퍼 오버플로우에 관한 완벽한 해결책은 아닌 것이, 귀환 주소가 아닌 민감한 데이터는 여전히 덮어씌어질 가능성이 있다.

    [편집] 포인터 보호

    버퍼 오버플로우는 포인터를 조작함으로써 (저장되어 있는 주소를 포함하여) 작동한다. 포인트 가드는 컴파일러 확장으로 제안되었는데, 공격자가 신뢰성 있게 포인터와 주소를 조작하는 것을 방지한다. 접근 방법은 컴파일러가 추가 코드를 삽입하여 자동적으로 포인터를 사용 전후에 XOR-인코딩하도록 하는 것이다. 공격자가 (이론적으로는) 어떤 값이 포인터를 인코드/디코드할 때 사용할지 알지 못하기 때문에 어떤 값으로 덮어 써야 원하는 효과를 거둘 수 있을지 알기 힘들게 된다. 포인트가드가 배포된 적은 없지만 마이크로소프트에서 비슷한 접근 방법을 구현하여 Windows XP SP2와 Windows Server 2003 SP1 이후에 적용하였다. 포인터 보호를 자동 기능으로 구현하지는 않았고, API를 추가하여 프로그래머의 재량에 따라 호출하여 사용하도록 하였다. XOR이 선형이므로, 공격자가 암호화된 포인터를 조작하여 어떤 주소의 하위 바이트만 덮어쓸 수 있다. 이렇게 하면 공격자가 여러번 시도하거나 복수의 위치 (예를 들어 NOP 썰매 안의 어떤 위치) 에 대해 시도함으로써 공격이 성공할 수 있다. 마이크로소프트는 임의로 암호화 방안을 변경함으로써 이 약점을 보완, 부분적으로만 덮어쓰기가 가능하게 하였다.

    [편집] 실행 공간 보호

    실행 공간 보호는 버퍼 오버플로우를 방지하기 위한 접근 방법으로 스택이나 힙 상의 코드가 실행되는 것을 막는다. 공격자는 버퍼 오버플로우를 이용하여 임의의 코드를 프로그램의 메모리에 삽입할 수 있지만, 실행 영역 보호가 있다면, 그 코드를 실행하고자 하는 어떠한 시도도 예외를 발생시킬 것이다. 어떤 CPU는 NX (No eXecute) 또는 XD (eXecute Disabled)비트 라는 기능을 지원하는데 소프트웨어와 연계하여 데이터의 페이지 (즉 스택이나 힙을 담고 있는) 를 읽고 쓰기는 가능하나 실행 불가로 표시할 수 있다. 어떤 유닉스 운영체제는 (예를 들어 오픈 BSD, 맥 오에스 텐) 은 실행가능한 공간 보호와 함께 출시되었다. (예: W^X) 옵션 패키지에는 다음이 포함될 수 있다:

    PaX

    Exec Shield

    오픈월

    새로운 마이크로소프트 변종도 실행 공간 보호를 지원하며 데이터 실행 방지라고 부른다. 상용 애드온은 다음과 같다:

    버퍼 쉴드

    스택 디펜더

    실행 공간 보호로 libc로 귀환 공격 또는 공격자 코드 실행에 의지하지 않는 공격을 방지한다고 보증할 수는 없다.

    [편집] 주소 공간 배치 난수화

    주소 공간 배치 난수화 Address space layout randomization (ASLR)은 컴퓨터 보안 기능으로 중요 데이터 영역, 예를 들어 실행 코드의 기반 주소, 라이브러리, 힙, 스택 주소 등을 임의로 프로세서의 주소 공간에 배치하는 것이다. 함수와 변수를 찾을 수 있는 가상 메모리 주소의 난수화로 버퍼 오버플로우 이용이 더 어려워지지만 불가능한 것은 아니다. 공격자가 이용 시도를 각각의 시스템에 따라 다르게 하도록 강요하므로 인터넷 웜 방어에 더 유용하다. 비슷하지만 덜 효과적인 방법은 프로세스와 라이브러리를 가상 주소 공간에 리베이스 하는 것이다.

    [편집] 심층 패킷 조사

    심층 패킷 조사로 네트웍 경계에서 아주 간단한 버퍼 오버플로우 원격 시도를 공격 고유 신호과 경험적 방법으로 검출할 수 있다. 알려진 공격 고유 신호 또는 긴 NOP 명령이 검출되면 패킷을 막을 수 있으며, 공격 패킷 내용으 조금 달라도 사용할 수 있다. 패킷 스캐닝은 효과적이지 못한데, 그 까닭은 알려진 공격만 막을 수 있고 NOP 썰매는 다양한 방법으로 암호화 할 수 있기 때문이다. 공격자들은 경험론적 패킷 스캐너와 침입 감지 시스템의 탐지를 회피하기 위하여 영숫자, 탈바꿈, 자기 수정 셸코드를 사용하기 시작하였다.

    [편집] 이용의 역사

    버퍼 오버플로우는 1972년 컴퓨터 보안 기술 기획 스터디에서 기법을 소개하였을 때 부터 이해되었던 개념이다. "이 기능을 수행하는 코드는 출처와 목적지 주소를 적절히 검사하지 않으므로, 사용자가 모니터의 일부를 덮어쓰도록 허용한다. 이는 코드를 모니터에 삽입하여 제어권을 획득하는데 사용될 수 있다." 오늘날 모니터는 커널이라고 불리울 것이다.

    1980년대 개인용 컴퓨터의 확산으로 이 기법에 대해 아는 사람의 수가 증가하였다. 코모도어 PET 상에서 예를 들어 흔히 두번째 테이프 버퍼를 사용하여 어셈블리 언어 루틴을 저장하였다. 어떤 프로그래머들은 최대 32KB인 컴퓨터의 주기억장소 공간에서 몇바이트를 절약하기 위해 베이직 언어의 번거로운 POKE 명령 사용 대신 프린트 버퍼의 시작점을 테이프 버퍼로 변경하여 6502 어셈블리 언어 코드(이상해 보이는 글자로 이루어진)를 직접 원하는 곳으로 출력하였다. 실제로는 프린터 버퍼가 테이프 버퍼 보다 길었기 때문에, 베이직 문자열이 쉽게 1024 바이트를 넘어갔고, PET상의 마이크로소프트 베이직 인터프리터와 간섭하였다. 초기 맥, 코모도어, 아타리등 초기 개인용 컴퓨터 부트 이미지 로더와 95, 98까지의 마이크로소프트 윈도우즈 운영체제는 버퍼 보호에 부적절하였고 많은 프로그래머들이 버퍼 오버플로우에 대해 알게 되었다. 최초로 문서에 남은 적대적 버퍼 오버플로우 이용은 1988년이었다. 모리스 웜이 인터넷에서 자신을 퍼뜨리기 위해 사용했던 몇가지 공격 가운데 하나였다. 그 프로그램이 이용했던 것은 핑거라는 유닉스 서비스였다. 1995년 토마스 로파틱은 독립적으로 버퍼 오버플로우를 재발견하였고 자신의 발견을 버그트랙 Bugtraq 보안 메일링 리스트에 공개하였다. 1년 후 1996년 엘리아스 레비 (알레프 원으로 알려진)는 프랙 지에 "재미와 소득을 위해 스택 때리기"라는 제목의 기사에서 스택 기반 버퍼 오버플로우 취약점을 공략하는 단계별 소개를 공개하였다.

    그 이후에 최소한 두가지의 대규모 인터넷 웜이 버퍼 오버플로우를 이용하여 많은 수의 시스템에 영향을 주었다. 2001년 코드 레드 웜은 마이크로소프트의 인터넷 정보 서비스 5.0의 버퍼 오버플로우를 이용했고, 2003년의 SQL 슬래머 웜은 마이크로소프트 SQL 서버 2000을 실행시키는 컴퓨터에 영향을 주었다.

    2003년 허가된 엑스박스 게임 안에 존재했던 버퍼 오버플로우가 이용되어 자작 게임을 포함한 허가 받지 않은 소프트웨어도 콘솔에서 모드칩이라고 알려진 하드웨어 변경 없이 이용할 수 있게 되었다. PS2 독립 공격도 버퍼 오버플로우를 사용하여 같은 작용을 플레이스테이션 2에 일으켰다. 황홍 공격은 닌텐도 위에서 같은 효과를 거두었는데, 젤다의 전설 황혼의 공주의 버퍼 오버플로우를 이용하였다.

    [편집] 예제 소스 코드

    아래의 C 소스 코드는 일반적인 프로그래밍 실수를 보여준다. 일단 컴파일 되면, 너무 긴 커맨드라인 인자 문자열을 가지고 실행하면 프로그램은 버퍼 오버플로우 오류를 발생할 것이다. 왜냐하면 이 인자의 길이를 체크하지 않고 버퍼를 채우는 데 사용하기 때문이다. [2]

    /* overflow.c - 버퍼 오버플로우를 설명한다 */ #include #include int main(int argc, char *argv[]){  char buffer[10];  if (argc < 2)  {    fprintf(stderr, "사용법: %s 문자열\n", argv[0]);    return 1;  }  strcpy(buffer, argv[1]);  return 0;}

    9개 이하의 문자 스트링은 버퍼 오버플로우를 일으키지 않는다. 10 이상의 문자들은 오버플로우를 일으킨다. 이것은 언제나 부정확하지만 프로그램 오류나 세그먼트 폴트를 일으키지는 않는다. strncpy는 버퍼에 쓰일 문자의 개수를 제한할 수 있다.

    이 프로그램은 strncpy를 이용해 아래와 같이 안전하게 다시 쓸 수 있다: [2]

    /* better.c - 문제 해결 방법 하나를 설명한다 */ #include #include int main(int argc, char *argv[]){  char buffer[10];  if (argc < 2)  {    fprintf(stderr, "사용법: %s 문자열\n", argv[0]);    return 1;  }  strncpy(buffer, argv[1], sizeof(buffer));  buffer[sizeof(buffer) - 1] = '\0';  /* 문자열의 끝을 분명히 맺는다 */  return 0;}

    [편집] 같이 보기

    컴퓨터 보안

    컴퓨터 비보안

    보안 중심 운영 체제

    정적 코드 분석

    스택 버퍼 오버플로우

    힙 오버플로우

    Return-to-libc 공격

    자가 수정 코드

    셸코드

    형식 문자열 공격

    자기 수정 코드

    죽음의 핑

    포트 스캐닝

    EOF

    `유령통화` 인터넷전화 해킹 속출

    교환기 접속 국제통화 시도… 월 수천만원 피해기업 발생도

    일반 사무실내 인터넷전화(VoIP)에 접속해 제3국과 무단 통화를 시도하는 기업용 인터넷전화 해킹이 빈번하고 있다. 이같은 기업용 인터넷전화 해킹은 해당 기업체는 물론 인터넷전화 회선을 제공하는 통신업체조차 사전에 파악이 어려워 피해확산이 우려되고 있다.

    6일 통신업계에 따르면 별정통신사업자인 I사는 최근 인터넷전화 해킹으로 인해, 회선임대를 위해 명의를 빌려준 직원들 앞으로 1억원이 넘는 통화비를 지불해야 할 상황에 처했다. 사내에 있는 인터넷전화 교환기(IP-PBX)로 누군가 1억원이 넘는 많은 양의 국제전화를 유발시킨 것이다.

    이 회사가 한달 평균 시내외 전화요금으로 지불하는 비용은 1000만∼2000만원선. 그러나 이처럼 인터넷전화 해킹이 시도된 달의 전화비용은 6000만원을 넘어선 상황이었다.

    문제가 있다고 판단한 I사와 기간통신사업자인 KT는 사내 교환망을 점검한 결과, 회사에서 전화를 전혀 사용하지 않는 상황에도 교환기에서는 계속 해외전화 트래픽 유발되고 있는 상황을 감지했다. 외부에서 누군가 교환기에 접속해, 이름도 생소한 몰디브, 소말리아 등에 엄청난 양의 통화를 유발한 것이다. 회사로서는 꼼짝없이 1억원에 달하는 통신비용을 지불하게 된 것이다.

    I사의 경우처럼, 누군가 기업내 교환기에 접속해 통화를 유발하는 인터넷전화 해킹이 빈번하게 발생하고 있다. 특히 최근 들어 일선 기업체는 물론 관공서, 금융권 등지로 인터넷전화가 빠르게 확산되면서 이러한 유형의 해킹 시도는 더 확산될 조짐이다.

    실제 피해를 보는 해당 기업체에서는 통신비 내역을 받아들기 전까지는 해킹 사실조차 확인하기 어렵다는 점에서 당혹스러워하고 있다. 특히, 국내뿐만 아니라 해외에서도 우회접속을 통해 기업내 교환기에 들어와 해킹이 가능하다는 점에서 피해확산이 우려되고 있다.

    보안 전문가들은 "인터넷전화는 개방형 인터넷 기술로 구현되기 때문에 기업 내에서 인터넷전화를 도입할 때에는 엄격한 기준의 보안체계를 설정해 둬야 한다"고 주문한다. 특히, 보안관리자가 별도로 없는 소호 사업장이나 기업에서도 필히 교환기내 보안설정 작업은 필수라는 설명이다.


  • 재미나는 화학 R-OH

     재미나는 화학 R-OH

     1  mo no

     2  di

     3  tri

     4  tetra

     5  pente

     6  hexa

     7  hepta

     8  octa

     9  noha

     10  deca

     11 hendaca

     12 dodeca

     15 pentadeca

     

    알콜 (R-OH)

    탄화수소의 수소원자 일부가 -OH기로 치환된 모양의 물질

    1. 알콜의 특징

        물에 잘녹으며, 이온화가 안되고, 액성은 중성이다.

        분자량이 크며, 용해도가 낮다.

        분자사이에는 수소결합을 형성하고 있어 녹는점, 끓는점이 비교적 높다.

        알데히드를 환원시켜 제조한다.

        Na, K과 같은 금속과 반응시 -OH의 H가 금속과 치환되어 수소기체가 발생한다.

     

    2. 알콜의 종류

        분자량에 따른 분류

          저급알콜 - 분자량 작고, 상온에서 액체

          고급알콜 - 분자량 크고, 상온에서 고체

        -OH의 수에 따른 분류

          1가 알콜 - CH3OH, C2H5OH

          2가 알콜 - C2H4(OH)2

          3가 알콜 - C3H5(OH)3

        -OH가 결합된 알킬기의 수에 따른 분류

          1차 알콜 - R-CH2OH

          2차 알콜 - 2R-CHOH

          3차 알콜 - 3R-COH

    3. 알콜의 반응성

      1) 알칼리 금속과 반응하여 수소발생

          2R-OH + 2Na → 2R-ONa + H2

      2) 1차, 2차 알콜은 산화반응을 하여 다른 물질로 변화

       

              R-CH2OH → R-CHO → R-COOH

              알 콜  알데히드  카르복시산

                OH               O

                │              ∥

              R-CH -R′  →  R-C-R′

                알콜            케톤

              * 3차 알콜  : 산화하지 않는다.

      3) 카르복시산과 반응 - 에스테르 생성(에스테르화 반응)

          R-COOH + R′OH → R-COOR′ + H2O

      4) 진한황산과 반응 - 탈수, 축합 반응

                          진한황산

          C2H5OH + C2H5OH  →  C2H5OC2H5 + H2O

                        130 ∼ 140℃

     

                진한황산

          C2H5OH  →  C2H4 + H2O

                  160℃

      5) 요오드포름반응

     

          에탄올에 KOH와 I2를 작용시키면 CH3I의 노란침전이 생긴다.

                  KOH+I2

            C2H5OH  →  CHI3 (노란색침전)

     

    에테르(R-O-R′)

    두개의 알킬기가 산소원자에 연결된 구조를 갖은 화합물

    1. 에테르의 특징

      1) 분자간에 -OH가 없으므로 수소결합을 할 수 없어 끓는점이 낮고 물에 섞이지 않는다. 

      2) 알콜 두분자에서  물 한분자를 탈수시켜 제조한다.

                          진한황산

          C2H5OH + C2H5OH  →  C2H5OC2H5 + H2O

                        130 ∼ 140℃

     

      3) 무극성, 불용성, 휘발성 물질이다.

      4) 용도로는 유기용매, 마취제로 사용된다.

    2. 에테르의 종류

      1) CH3OCH3  : 디메틸에테르

      2) CH3OC2H5  : 에틸메틸에테르

      3) C2H5OC2H5 : 디에틸에테르

     

    알콜 (R-OH) 


  • ㅡㅡ;; 노인복지도 지금 문제인데.. 사회복지는 얼마나 개판이던가??
  • 요양보호사 돈 벌 생각으로 하면 당연 메리트 없지..
  • 복지의 분류
    1. 사회복지 - 청소년, 장애인(특수), 아동...
    2. 노인복지 - 노인..
    * 사회복지는 모든 분야에 전체적으로 다 할 수 있다. (물론 1급일 때..) but 노인복지는 노인만 가능하다. (요양원, 양로원외 국가지원)
  • 정신보건사회복지사의 경우 정신보건법에서 명명하는 정신보건 전문요원의 한 분야입니다.

    정신보건 전문요원이라고 하면 정신보건 간호사, 정신보건사회복지사, 정신보건임상심리사를 총칭하는 말입니다.

    정신보건사회복지사는 사회복지사 1급 자격증을 취득한 이후에 보건복지부에서 지정한 수련기관에서 1년동안 수련을 받은 이후에 협회를 통한 이론시험을 받은 이후에 취득하게 되는 보건복지가족부의 국가자격증입니다.

    취득후에는 정신보건법에 명시되어 있는 시설, 정신의료기관,사회복귀시설, 그룹홈, 입소시설, 주거시설, 정신보건센터 등에서 취업할 수 있으며, 그 외에 사회복지사들이 일하는 모든 공간에서 일을 할 수 있습니다.

    사회복지의 모든 분야들이 그렇지만 일을하면서 꾸준하게 공부하고 배움의 자세를 가져야 하는것이 정신보건사회복지사 입니다. 최근에는 사회가 정신건강에 대한 관심을 가지게 됨으로써 정신보건 전문요원들의 필요와 요구도가 더욱 많아 진것이 사실입니다.

    하지만 단순하게 돈을 벌기위한 목적이라면 조금 고민하실 필요가 있습니다. 쉽지 않은 길이며, 자신을 되돌아보고 자신에 대한 성찰(?)을 하는 시간도 분명하게 존재하고 있기 때문입니다. 보다 자세한 문의 사항은 정신보건사회복지사에 문의하시면 좋을 것 같습니다.
  • 내 Diagnosis 은 Colitis 는 만성인지라.. 그려려니... 하지.
  • 요즘 Heartburn 증상이 있다.. 한 3주 동안 있다가 사라짐.. but 요즘 잔병은 Acute Bronchitis 이거.. 목이 좀.. ㅡㅡ;;
  • 발프로산나트륨(Valproate Sodium)
    Sodium valproate

    C8H15NaO2 : 166.19
    이 약을 건조한 것은 정량할 때 발프로산나트륨 (C8H15NaO2) 98.5 % 이상을 함유한다.

    참 맛있는 약이겠지?? ㅡㅡ;;;
  • Traffic collision permanent lesion으로 Tremor ,Restless Legs Syndrome (RLS) 증상이 나타났다.
    알겠냐??? 이래서 군대 고참들이 병신 새끼들이라는 거다!!!
    뺑끼 같은 개소리하네.
    간호학원 출신 의무병중 개날나리는 도저히 용서 자체가 안돼..
    지금 그랬으면 MG-42로 완전 작살 냈을 꺼다..
  • 개병신 의사들이 그걸 2005년도에야 알았으니 의학수준이 얼마나 떨어진건지 알기나 하냐???
  • so.. Angry about the military~!!!! Duty? 여자도 안가는 군대duty는 개나 줘버려..
  • http://www.hani.co.kr/arti/opinion/editorial/498089.html
    한국현대사악해가 아니고????
  • http://media.daum.net/politics/dipdefen/view.html?cateid=1068&newsid=20110928172111096&p=yonhap
    어째 미군은 맨날 술만 쳐 마시고 이러냐??? 미군수준이 왜? 그래??
    그러니까 fucking 소리 듣는거다..
    media.daum.net  
    (동두천=연합뉴스) 장희재 기자 = 경기도 동두천경찰서는 술에 취해 10대 여학생을 성폭행한 혐의(성폭력범죄의 처벌 등에 관한 특례법 위반)로 미군 제2사단 소속 K(21)이병을 조사한 뒤 신병을 미군 헌병대에 인계했다고 28일 밝혔다.K이병은 지난 24일 오전 4시께 
    image
  • www.mediatoday.co.kr  
    KBS와 MBC가 출연금지하고 있는 연예인 36명의 명단이 공개됐다. 하지만 이 명단에는 현재 방송출연을 하지 못하고 있는 ‘소셜테이너’가 빠져 있어 실제 그 숫자는 더 많을 것으로 보인다. 
    image
  • http://zine.media.daum.net/weeklykh/view.html?cpid=29&newsid=20110928145846557&p=weeklykh
    낙하산이 좋으면 커레이 하면서 공수부대 가는 건 어때???
    zine.media.daum.net  
    ㆍ금융권 인사 소리소문 없는 '스텔스 낙하산', 올드보이 귀환이 특징"에이, 전 별다른 줄이 없잖아. 그렇다고 (소망)교회를 다니는 것도 아니고. 나이도 60도 안 넘고. 나는 자격이 안 되지."저녁 식사자리. 1급 고위관료인 ㄱ씨에게 '이제 한 자리 할 때가 되지 않