2014년 5월 22일 목요일

Ubuntu Linux 콘솔에서 자동 로그인 설정


# sudo vi /etc/init/tty1.conf


맨 아래 exec /sbin/getty -8 38400 tty1 라인을 지우고 다음과 같이 입력

exec /bin/login -f root < /dev/tty1 > /dev/tty1 2>&1

# sudo reboot


2014년 5월 17일 토요일

프로세스의 스케줄링과 교착상태

1. 프로세스
관리하는 최소 단위의 작업으로 주기억장치에 저장된 프로그램, 즉 실행 중인 프로그램을 말한다.

2. 스케줄링
시스템은 프로세스에게 CPU를 할당해야 하는데, CPU는 한 순간에 한가지 작업만이 가능하기 때문에 이를 분할하여 여러 프로세스에게 나누어 주어야 한다. 시스템의 성능을 높이기 위해선느 CPU 사용 순서를 결정하기 위한 정책을 스케줄링이라 한다. 스케줄링 종류는 선점형, 비선점형이 있다.

3. 교착상태의 정의
다중 프로그래밍 시스템 하에서 서로 다른 프로세스가 일어날 수 없는 사건을 무한정 기다리거나, 자신의 자원은 놓아주지 않으면서 상대 프로세스의 자원을 요구하는 등 더 이상 진행되지 못하는 상태를 말한다.

4. 교착상태의 4가지 조건
상호배제(Mutual Exclusion) : 프로세스들이 자원을 해제하지 않아, 다른 프로세스들이 자원을 사용할 수 없도록 만든다(자원의 베타적 제어권). 한번에 한 프로세스만이 자원을 사용할 수 있으며, 다른 프로세스가 그 자원을 요구하면, 자원을 요구한 다른 프로세스는 자원이 해제될 때까지 임계구역 밖에서 대기한다.
점유와 대기(Hold & Wait) : 프로세스가 다른 자원을 요구하면서, 자신에게 할당된 자원을 해제하지 않을 때 발생. 최소한 하나의 자원을 점유하고 있는 프로세스가 존재해야 하며, 이 프로세스는 다른 프로세스에 할당된 자원을 추가로 점유하기 위해 대기한다.
비선점(Non-preemption) : 비선점 자원들은 그들을 점유하는 프로세스로부터 벗어나지 못한다(도중에 해제될 수 없다). 단지 프로세스들 자신만이 점유한 자원을 해제할 수 있다. 즉, 프로세스에게 일단 할당된 자원을 모두 사용하기 전에는 그 프로세스로부터 도중에 회수할 수 없다.
환형 대기(Circular Wait) : 프로세스와 자원들이 원형을 이루며, 각 프로세스는 자신에게 할당된 자원을 가지면서 상대방 프로세스의 자원을 상호 요청하는 경우이다.

5. 교착상태의 해결방안
예방, 회피, 탐지, 복구

2014년 5월 13일 화요일

스위치 환경에서의 스니핑 공격 기법

1. Switch Jamming
스위치의 MAC Address Table의 버퍼를 오버플로우 시켜서 스위치가 허브처럼 동작하게 강제적으로 만드는 기법을 말한다. 스위치는 Fail Open 정책, 즉 실패 시에 모두 허용해주는 정책을 따르는 장비이므로 문제가 발생하면 Hub처럼 모든 노드에게 패킷을 전송한다.
MAC Address Table을 채우기 위해 Source MAC 주소를 계속 변경하면서 패킷을 지속적으로 전송하는 방식으로 공격한다.

2. ARP Spoofing
공격자가 특정 호스트의 MAC주소를 자신의 MAC주소로 위조한 ARP Reply 패킷을 지속적으로 전송하면 희생자의 ARP Cache에 특정 호스트의 MAC주소 정보가 공격자의 MAC주소 정보로 변경이 된다. 이를 통해서 희생자로부터 특정 호스트로 나가는 패킷을 공격자가 스니핑하는 기법이다.

3. ARP Redirect
공격자가 자신이 라우터인 것처럼 MAC주소를 위조하여 ARP Reply패킷을 해당 네트워크에 broadcast한다. 이를 통해 해당 로컬 네트워크의 모든 호스트와 라우터 사이의 트래픽을 스니핑하고, IP Forward 기능을 통해 사용자들이 눈치 채지 못하도록 하는 기법이다.

4. ICMP Redirect
ICMP Redirect 메세지는 호스트-라우터 또는 라우터 간에 라우팅 경로를 재설정하기 위해 전송하는 메세지이다. 공격자가 이를 악용하여 특정 IP 또는 대역으로 나가는 패킷의 라우팅 경로를 자신의 주소로 위조한 ICMP Redirect 메세지를 생성하여 희생자에게 전송함으로서 패킷을 스니핑하는 공격이다.

5. using SPAN port(mirroring port) of Switch
스위치의 SPAN 포트는 스위치를 통과하는 모든 트래픽을 볼 수 있는 포트로 관리적인 목적으로 사용되지만 공격자가 트래픽을 스니핑하기 좋은 장소를 제공해 준다.

2014년 5월 4일 일요일

유닉스 계열 시스템에서 사용자가 명령 실행 시 절차

  1. 현재 작업 디렉토리에서 명령어를 찾는다.
  2. 만일 없다면 $PATH로 지정된 경로에서 명령어를 찾는다.
  3. 명령어가 있으면 실행권한을 확인한다.
  4. 실행권한이 있다면 명령을 실행시킨 사용자 ID로 명령어를 실행한다.
  5. 실행권한이 없다면 이 파일에 SETUID가 설정되어 있는지 확인한다.
  6. SETUID가 설정되어 있다면 명령어의 소유주 권한으로 명령어를 실행한다.

UNIX/Linux에서 사용자 패스워드 관리

유닉스 및 리눅스는 사용자 계정의 인증을 위해 /etc/passwd 파일에 각 계정별 등록된 사용자의 정보를 보관하고 있다. 과거에는 사용자의 패스워드를 인코딩하여 /etc/passwd 파일의 두번째 필드에 저장하였으나, 오늘날 유닉스 계열 시스템에서는 /etc/shadow 파일에 암호화된 패스워드를 저장하고 있다.

/etc/shadow 파일의 형식

[user_account]:[encrypted_password]:[last_change]:[minlife]:[maxlife]:[warn]:[inactive]:[expires]

  1. user_account : 사용자 계정을 인덱스로 하여 /etc/passwd 파일과 사용자 정보를 서로 연계한다.
  2. encrypted_password : 암호화된 패스워드로 사용자가 입력한 패스워드를 이 필드와 비교한다.
    • 이곳에는 정상암호, NP, *LK*, 공백 중 한가지가 기재됨
    • 정상암호는 시스템 관리자가 패스워드를 지정해주거나 일반사용자가 passwd 명령을 통하여 설정할 수 있다.
    • NP는 no password를 의미하며, 주로 어플리케이션 계정에 이와 같은 설정을 한다.
    • *LK*이 표기되어 있으면 Lock이 설정된 사용자 계정이다. 사용자 생성 후 정상적인 패스워드를 설정해주지 않아도 Lock이 걸린다.
    • 공백 : 이곳에 공백으로 설정되어 있으면 이는 시스템 관리자가 암호를 설정해서 사용자에게 알려주는 방식이 아니라, 일반 사용자가 처음 로그인할 때 암호를 직접 설정해서 사용할 수 있도록 하는 방식이다.
  3. last_change : 마지막으로 패스워드를 변경한 날로 1970년 1월 1일부터 며칠이 지났는지 그 일수로 표기한다. 즉, 유닉스 타임 포멧으로 기록된다.
  4. minlife : 사용자가 패스워드를 변경할 수 없도록 지정된 기간의 일수
  5. maxlife : 현재 사용 중인 패스워드를 변경하지 않고 사용할 수 있는 기간의 일수
  6. warm : maxlife에 지정한 일수가 며칠 남지 않았음을 알리는 필드로 로그인할 때 마다 출력할 경고메세지
  7. inactive : 시스템에 로그인을 하지 않는 사용자는 계정을 비활성화시켜서 로그인이 되지 않도록 하기 위한 기능으로 입력된 일 수 이상 로그인하지 않으면 계정이 비활성화 된다.
  8. expires : 사용자 계정이 만료되는 날로 유닉스 타임 포멧으로 표기

2014년 5월 3일 토요일

Compiling SGMiner on Ubuntu Linux


$ sudo apt-get install libcurl4-openssl-dev pkg-config libtool libncurses5-dev

$ sudo apt-get install autoreconf

download and unzip AMD ADL SDK : http://developer.amd.com/tools-and-sdks/graphics-development/display-library-adl-sdk/

download and install AMD APP SDK : http://developer.amd.com/tools-and-sdks/opencl-zone/opencl-tools-sdks/amd-accelerated-parallel-processing-app-sdk/downloads/

$ cd AMD-APP-SDK

$ sudo ./Install-AMD-APP.sh

$ git clone https://github.com/veox/sgminer.git
$ cd sgminer

$ cp [path where you extracted AMD ADL]/include/* [sgminer source path]/ADL_SDK/

$ autoreconf -i

$ CFLAGS="-O2 -Wall -march=native" ./configure


$ make

$ make install

$ sgminer -o http://pool:port -u username -p password

2014년 5월 2일 금요일

구글 검색엔진을 이용한 정보유출 방지

1. 검색엔진 해킹의 특징

  • 특정 대상에 대한 정보 수집
    • 공격 대상 회사의 서버는? 서버 IP주소는? 서버가 가지고 있는 취약점은?
  • 특정 공격에 취약한 대상 찾기
    • 공격자가 가지고 있는 OO공격코드의 영향을 받는 서버는?
  • 사회 공학
    • 네트워크 관리자의 이메일 주소와 전화번호는? 개인정보 담당 직원의 이름은?
  • 공격 대상이 전혀 모르는 상태에서 대상에 대한 정보수집 가능
    • 해킹이 검색엔진을 통헤 이루어지기 때문에 실제 공격 대상으로 단 하나의 패킷도 보내지 않고 공격 대상에 대한 정보를 수집할 수 있다. 그리고 검색엔진은 자신이 수집한 페이지의 사본을 저장하기 때문에 공격 대상 웹 페이지가 삭제되었거나 페이지로의 링크가 제거된 이후에도 검색이 가능
  • 어렵지 않다
    • 웹브라우저만 있으면 가능
  • 공격자의 익명성 보장
    • 공격자가 검색엔진만 가지고 정보를 수집하기 때문에 공격자의 익명성이 보장될 수 있음. 게다가 프록시 서버나 토르와 같은 IP주소를 은닉하는 방법을 사용하면 공격자는 자신의 정체를 더욱 숨길 수 있음
  • 공격 대상이 매우 많다
    • 현재 많은 사람들이 인터넷에서 개인적 용도로 웹을 사용하고 있다. 이런 사용자가 단 1시간 동안 자료를 다운로드 할 웹서버를 열어놓았다 하더라도 그 기간 동안 검색엔진이 그 웹 서버에 접근해서 자료를 긁어갔을 가능성이 있으며, 웹 애플리케이션과 네트워크 장비에서 제공하는 웹 인터페이스 역시 검색엔진의 수집 대상이 될 수 있다.


2. 구글 검색엔진에 대하여

  • 대소문자 구분을 하지 않음
    • 구글 검색 창에 입력하는 요청문은 대소문자 구분을 하지 않기 때문에 Apple, aPple, ApPle 모두 동일하게 취급
  • 와일드카드 문자
    • 구글에서 와일드 카드 문자는 *로, 이것은 임의의 단어 1개와 대응된다
  • 자동 단어 확장
    • 구글은 때때로 이용자가 입력한 단어뿐만 아니라 그 단어와 관련된 다른 단어를 검색에 포함시킨다. 예를 들어 'pet lemur dietary needs'라는 검색어를 입력했을 때 구글은 'pet lemur diet needs'라는 검색어를 포함하는 페이지까지 찾는다. 그 이유는 dietary의 약자가 diet이기 때문
  • 일부 단어 무시
    • 구글은 요청문 중 where나 how, the와 같이 흔한 단어를 검색에서 제외한다
  • 10단어 제한
    • 구글은 검색 요청문의 크기를 10단어로 제한한다. 10개보다 더 많은 단어를 입력해야 하는 경우에는 와일드카드 문자를 적절히 이용해야 한다.
  • 구글 검색은 요청문에 입력하는 단어를 개별적으로 처리하는지, 아니면 하나로 묶어서 처리하는지에 따라 단어 검색과 구 검색으로 나뉜다. 단어 검색이란 'famous actor brad'와 같이 입력하는 단어들간에 연관관계가 없는 것을 의미한다. 이 요청문을 구글에서 검색하면 famous와 actor와 brad라는 단어의 순서에 관계없이 단순히 이들 단어를 포함한 페이지가 결과로 나온다. 그리고 때때로 이들 단어 중 일부만을 포함한 페이지가 결과로 나온다.
  • 이와 반대로 구 검색이란 "Google hacker"와 같이 단어들을 따옴표로 묶은 것이다. 따옴표에 의해 이 단어는 하나의 구로 묶였기 때문에 이 요청문을 구글에서 검색하면 정확히 Google hacker라는 구를 포함한 웹 페이지만이 검색된다. 다른 검색 엔진과 마찬가지로 구글에서도 여러가지 연산자를 사용할 수 있다. 이러한 연산자는 구글 검색 결과를 좁혀서 원하는 결과를 빨리 찾는데 도움을 준다.


3. 구글 검색엔진의 연산자

  • 구글 논리 연산자
    • AND : 구글 요청문은 기본적으로 AND를 내포하고 있기 때문에 불필요함
    • + : 그 다음에 나오는 단어를 반드시 포함시킴
    • - : 그 다음에 나오는 단어를 검색에서 제거
    • | : OR 연산자
    • () : 그룹핑(우선순위 부여)

  • 구글 고급 연산자
    • intitle : 페이지의 제목에서 검색
    • allintitle : 연산자 뒤에 나온 모든 단어를 페이지의 제목에서 검색
    • inurl : URL에서 검색
    • allinurl : 연산자 뒤에 나온 모든 단어를 URL에서 검색
    • site : 특정 사이트에서 검색
    • filetype : 특정 종류의 파일 검색
    • link : 다른 페이지로의 링크를 검색
    • inanchor : 링크 문자열 내에서 검색
    • cache : 캐시로 저장된 페이지를 보여줌
    • numrange
    • daterange
    • info
    • related
    • author
    • group
    • insubject


4. 구글을 이용한 침투테스트

  • 공격대상, 범위선정
  • 사전 정보 수집
    • 인트라넷/인사 페이지
    • 네트워크 도움말 페이지
    • 구인정보
    • 이메일 정보 수집
    • 회사 직원으로부터 엿듣기
  • 네트워크 매핑
    • 회사와 관련된 도메인 정보 수집
    • 하위 도메인 정보 수집
    • IP주소 정보 파악
    • 호스트 연결성 파악(dead or alive)
    • 포트 파악
    • 도메인 정보 수집
    • 네트워크 구조 파악
    • 웹 기능이 활성화된 네트워크 장비 검색
    • 네트워크 보고서 검색
  • 취약점 파악, 공격코드 확보
    • 공격 대상 서버의 취약점을 파악하는데 성공하여 그 취약점에 대한 공격 코드를 찾는 경우
    • 이미 공격자가 가지고 있는 공격 코드에 해당하는 서버를 찾는 경우


5. 구글 해킹 방어

  • 튼튼한 보안정책
  • 웹 서버 보호
    • 디렉토리 목록 기능 제거
    • robots.txt 이용
    • NOARCHIVE 태그 이용
    • 웹 서버 소프트웨어 기본 페이지, 프로그램 제거
  • 자신의 사이트 모의해킹
  • 구글의 도움 얻기
    • 구글 자동 URL 제거 페이지(http://services.google.com/urlconsole/controller)
      • 새로운 robot.txt 지정
      • META 태크로 캐시 제거
      • 페이지 완전 제거
      • 구글 뉴스그룹 사이트에 있는 글 제거


참고자료 
Google Hacking Database(http://johnny.ihackstuff.com)
구글해킹, 2005. 6, 에이콘출판
마이크로소프트웨어 실전강의실
구글 도움말(http://www.google.com/help/operators.html)

Reentrancy Attack: 블록체인 스마트 컨트랙트의 치명적인 취약점

블록체인 기술이 전 세계적으로 주목받으면서 스마트 컨트랙트(Smart Contract)의 사용이 급격히 증가하고 있습니다. 하지만 그만큼 보안 취약점도 함께 늘어나고 있는데, 그 중에서도 Reentrancy Attack(재진입 공격)은 매우 치명적이고...