Information system

Information security(2) - flaws & malware

yudam 2022. 5. 26. 17:37

Flaws, faults, failures

  • Flaws : 프로그램 상 문제
    • security flaw : confidentiality, integrity, availability 등 security에 문제를 줄 수 있는 문제
    • Faults : 잠재적인 문제 - programmer / specifier / inside view
    • Failures : 문제가 발생함 - user / outside view

faults를 고치는 법

  • 일단 faults를 찾기
    • 고의로 failures 발생시킴 ( attacker 처럼 생각하라!)
  • pentrate & patch- faults를 찾으면 고친다
    • 마이크로소프트의 patch tuesday가 잘 알려진 예시
  • 패치한다고 다 좋은 게 아니다
    • 좁은 focus로 failure를 잡아내면 다른 더 큰 문제가 발생할 수 있다. 부분적인 fix가 다른 것들과의 불일치를 낳고 문제를 만든다.
    • 즉 하나의 fault패치가 또다른 fault를 낳는다

 

Unexpected behavior

  • 프로그램의 동작이 지정될 때, 일반적으로 프로그램이 해야 할 일을 나열한다.
  • ls command - user가 해당 디렉터리를 읽을 권한이 있다면 디렉터리 안 파일의 이름을 list한다.
  • 대부분의 사람들은 그 리스트에 무언가 추가되어있어도(추가 동작이 실행되어도) 신경쓰지 않을 것이다 - 그런데 이것을security / privacy관점에서 보면 추가 동작은 나쁘다!
    • 파일 이름을 표시한다 → 공공 웹사이트에 게시한다?
    • 파일 이름을 표시한다 → 그 파일을 삭제한다?

 

Types of security flaws

  • inentional flaws
    • malicious(악의적인) flaws - 어택 시스템에 삽입된다
    • 그것이 어떤 특정 시스템에 어택을 가하기 위한 것이라면 우리는 그것을 targeted malicious flaw라고 한다.
    • Nonmalicious(악의적이지 않은, 그러나 의도적인) flaws - 어떤 목적을 위해 시스템에 일부러 삽입한 것이지만, attacker가 사용해 failure를 일으킬 수 있다.
  • unintentional flaws
    • 대부분의 security flaw는 의도치않은 프로그램 에러에서부터 나온다.
    • 아래 buffer overflows, Integer overflows, format string vulnerabilities, Incomplete mediation, TOCTTOU error 등은 unintentional flaws이다.
  •  

unintentional flaws

buffer overflows

  • 입력 데이터에 대한 버퍼사이즈를 체크하지 않는다면? - 여기에서 벗어나는 것들이 프로그램을 망가뜨림

 

 

smashing the stack for fun

  • 배열의 끝보다 길게 씀으로써 실행 스택을 때려부술 수 있다..
  • buffer overflow가 어떻게 작동하는지 보여주는 사례가 된다.
  • upshot : attacker가 stack의 배열 끝을 지나 데이터를 쓸 수 있는 경우, 저장된 return address를 덮어쓸 수 있음. function이 return되면 아무 address로도 jump할 수 있음
  • Targets : setuid를 실행하는 로컬머신의 프로그램 또는 머신을 조작하는 network daemons

 

  • buffer overflow의 종류 - 악으앙ㄱ강ㄱ 데이터구조좀 열심히 할걸 으악악악윽악
    • single byte를 쓸 수 있다면 작동하는 attack
    • stack 대신에 heap구조로 버퍼 오버플로우
    • 쉘코드 대신에 프로그램, 라이브러리의 다른 파트로 점프

 

buffer overflows에 대응하는 법

  • bound checking하는 language 사용 - catce exception
  • non-executable stack
  • 각 프로세스마다 랜덤 어드레스 스택
  • 각 function을 return하기 전에 탐지 - “Canaries”

 

Integer overflows

  • 정수(int)의 값이 커져서 허용된 공간보다 커짐. 실제 저장 값이 아주 작은 수거나 음수가 되어 프로그램이 오류나는 vunerability
  • machine integer는 제한된 숫자 set만 나타낼 수 있다.
  • 프로그램은 integer가 항상 양수라고 가정하는데, overflow가 일어나면 integer가 음수로 바뀌고, 가정을 위반하게 된다. + mathmatical operation causes overflow
  • attacker는 프로그램에 값을 전달하고 그것이 overflow의 trigger가 된다.
    • 그래서 데이터 타입이 중요하다고 했던거다.. 파이썬의 max number는 sys.maxint()등으로 알 수 있다.. 확인하는 버릇을 들이자

format string vulnerabilities

  • class of vulnerabilities는 2000년에 발견되었다.
  • (in c) printf(”%s%s%s%s”)는 프로그램을 망가뜨린다

 

Incomplete mediation

  • 유저는 가끔 data 입력할때 오타.
  • 웹 어플리케이션은 유저가 입력한 것이 유효한 request인지 점검해야한다. 이를 mediation이라고 한다.

 

→ 그러니까 우리는 user-supplied input 값이 안전하게 well-specified values 내에 속하는지 잘 확인해야한다.

 

client-side mediation

  • client-side mediation 폼을 적용한 웹사이트를 방문한 적이 있을 것이다.
  • submit 버튼을 클릭했을 때 자바스크립트 코드가 먼저 입력한 데이터가 유효한지 체크
  • 유효하지 않은 데이터를 입력했다면 popup으로 제출을 방지함
    • related issue - client-side state
      • 많은 웹사이트들은 client가 keep state한다고 믿지만 그들이 sever로 들어가는 hidden fields로 간다면?
    • problem : what if the user..
      • 자바스크립트를 끈다면?
      • greasemonkey - 제출하기 전에 폼 수정
      • 웹브라우저말고 웹서버랑 interacts
      • manually하게 서버에 연결 - telnet server.com 80
      → 그렇다면 유저가 client-side state를 수정할 수 있게 된다.
    •  

incomplete mediation에 대응하는 법

  • client-side mediation은 유저친화적 인터페이스로써는 OK method다. 그러나 security 목적으로는 쓸모없다.
  • 따라서 server-side mediation이 필수적이다.
    • 항상 모든 필드의 데이터를 체크할 수 있게
    • 클라이언트가 데이터를 수정할 수 없도록

TOCTTOU errors

  • time - of - check - to - time - of - use (race condition error)
  • 다음과 같은 절차에 따라 일어나는 에러이다
    • 유저가 시스템에 어떤 action을 수행할 것을 request. → 시스템이 그 유저가 해당 action을 수행하는 데 있어서 허용된 유저임을 확인 → 시스템이 action을 수행
  • ex) 특정 unix terminal program이 setuid. 그리고 터미널을 유저에게 할당해줄 수 있음. 이는 log file을 쓸 수 있게 명령한다. 유저에게 request file을 쓸 수 있는 자격이 있는지 먼저 체크한다. 이 때 attacker는 symbolick link(바로가기) 링크를 만든다. 그리고 check와 open 사이 시점에 정보를 바꿔버린다.
  • problem - 권한을 체크하는것과 오퍼레이션 실행 사이에 시스템이 바뀌어버리는 것
  • 그럼 attacker는 정말 win the race 할 수 있을까??? - 추후 보완

 

TOCTTOU errors에 대응하는 법

  • privileged action을 수행할 때, access control decision과 관련된 모든 정보가 check와 action 사이에 일치하는지 확인
  • private copy를 유지하고 request가 race 도중에 바뀌지 않게 하기
    • 가능하다면 object가 직접 act 할 수 있게
    • 불가능하다면 race동안 object가 바뀌지 않도록 lock
  •  

 

Malicious code : Malware

  • malware :악성 바이러스로, malicious intent로 적힌 소프트웨어의 다양한 형태
  • malware의 특징 - harm을 일으키기위해 실행된다
  • 어떻게 실행되나?
    • user action
      • malicious software를 다운로드 후 실행
      • malicious ActiveX control이 포함된 웹페이지 방문
      • 실행되는 이메일 오픈
      • CD 삽입.. (??)
    • exploting an existing flaw in a system
      • network daemons의 buffer overflows
      • 이메일 클라이언트나 웹브라우저의 buffer overflows
    virus, worm, trojan horse 등등 모두 malware에 포함

Viruses

바이러스는 다른 독립적 프로그램의 코드 내에 스스로를 주입한 다음, 그 프로그램이 악성 행동을 하고 스스로 확산되도록 강제하는 컴퓨터 코드다.

  • malware중 하나로, 다른 파일을 감염시킨다.
  • 원래는 바이러스는 프로그램 실행으로만 감염시킬 수 있었다. 오늘날에는 많은 데이터 도큐먼트 포맷이 실행가능한 코드를 포함한다. (macros 같은)
  • 파일이 실행되면 (또는 그저 열리기만 하면) 바이러스가 활성화되고 스스로 복제되면서 다른 파일을 감염시킨다
  • 이 방법으로 바이러스는 파일간, 컴퓨터간 확산된다.

 

Infection

  • 바이러스는 이미 존재하는 nonmalicious 프로그램이나 도큐먼트를 수정하고싶어함.
  • 바이러스는 dirty work를 할 수 있으며 transfer control back to the host
  • 프로그램을 실행
  • 매크로로 도큐먼트를 실행
  • 시작프로그램 목록에 바이러스 실행 포함 - 오에스가 boot 되는 순간 감염!

 

Spreading

  • 어떻게 컴퓨터 간 감염시키나?
  • 유저가 감염된 파일을 전송 (또는 p2p네트워크- 토렌트같은)
  • 바이러스는 유저액션을 요구한다

 

payload

  • 퍼뜨리는 것 외에 바이러스는 무엇을 시도하나?
  • 어떤 바이러스는 virus scanning software를 무력화시키므로써 탐지를 피함
  • 대부분의 바이러스는 payload를 가짐
  • 감염된 머신의 페이로드가 활성화되면 무언가가 일어남
    • 지우거나 암호화됨
    • 엑셀 등 문서 손상
    • keystroke logger가 설치되고 온라인뱅킹 비밀번호가 캡쳐됨(모니터링)
    • 특정 타겟 웹사이트 attacking

Spotting viruses

  • 언제 바이러스를 찾아야 할까?
    • 파일이 컴퓨터에 추가될때
    • 그때그때 전체 statke를 스캔
  • 어떻게 바이러스를 찾아야 할까?
    • Signature-based protection
      • 잘 알려진 바이러스를 리스트업
      • 어떤 바이러스는 polymorphism
      • list의 바이러스 목록과 비교. 탐지되었을 때 어떤건지 name 앎
      • list에 없으면 탐지 불가
    • behaviour-based protection
      • 의심스러운 패턴에 주목. 탐지되었을 떄 name 모름


  •  
  • → 이들은 1종오류 및 2종 오류를 범할 수 있음. false negatives가 더 치명적.

Trojan horses

트로이 목마는 자가 복제는 하지 못하지만 사용자가 원하는 무언가로 위장해 자신을 활성화하도록 유도하는 방식으로 피해를 입히고 확산된다.

  • 무해한 것처럼 보이나, malicious behaviour가 숨어있는 프로그램
  • potentially unwanted programs (PUP)
  • scareware의 형태로 유저에게 돈을 지불하게하기도 함
  • 바이러스와 달리 자가복제는 못하지만 컴퓨터간 퍼지기 쉬움

 

Logic bombs

응용프로그램 시작 또는 특정 날짜에 도달하는 등 이벤트에 대한 응답이 트리거가 되어 실행되는 malware.

  • 이 트리거는 트로이 목마에 포함되거나 프로그램 실행 등으로 만들어짐

 

Spotting Trojan horses & logic bombs

  • 탐지하기 어려움 - 유저가 의도적으로 코드를 돌렸으니까!!!
  • 나쁜 행동으로 만들어지는 payload를 예방하는 것이 최선..

 

Worms

웜은 독립적으로 실행되는 악의적인 소프트웨어로, 스스로를 복제하고 다른 컴퓨터로 확산된다.

  • 실행 프로그램 필요 없음.
  • 널리 배포된 소프트웨어의 security flaws를 이용.

 

The morris worm

  • 최초의 인터넷 웜. 1988년 cornell이 실행함
  • 한 번 감염되면 머신이 다음 세 가지 방법으로 infect
    • buffer overflow → back door → dictionary attack → 비밀번호 없이 다른 머신에 퍼뜨릴 수 있음

The code red worm (2001)

Slammer worm(2003)

 


other malicious code

  • web bugs
  • back doors(trap doors)
  • salami attacks
  • privilege escalation
  • rootkit
  • keystroke logging
  • interface illusion
    • conflicker worm
    • phishing
  • man-in-the-middle attacks
    • keyboard logging, interface illusion, phishing이 그 예시
    • 유저간 커뮤니케이션 사이에 끼어듦
    • 지금 현재 유저가 하고 있는 것을 볼 수 있을 뿐만 아니라 패스워드 캡쳐도 가능 은행에 로그인할 때 session 을 hijack하고 악성 커맨드 삽입
      • 스크린에서 진짜로 일어나는 일을 볼 수 없게 속이고 … 그러니까 몰래하는 rootkit.

 

 

* 출처 한양대학교 원영준 교수님 2022-1 information security 강의 자료 정리

'Information system' 카테고리의 다른 글

ERP system - CH6  (0) 2022.06.23
Information security(3) - security control  (0) 2022.05.26
Information security(1) - security & privacy & terminology  (0) 2022.05.26
ERP system - CH5  (0) 2022.04.25
ERP system - CH4  (0) 2022.04.25