운영체제 16) Security

오영선·2022년 8월 2일
0

보안

  • 보안은 컴퓨터 시스템에 필수적.

  • 시스템과 데이터의 무결성 보존률을 확인할수 있는 방법

  • 무단 액세스, 악의적인 파괴, 실수로 인한 비 일관성을 방지하고 컴퓨터 자원을 보호

    컴퓨터 자원 : 시스템에 저장된 정보(데이터, 코드), CPU, 메모리, 보조저장장치, 3차 저장장치, 네트워킹 등이 있다.

16.1 보안문제

우리는 시스템 자원들이 모든 상황에서 의도된 대로 사용되고 접근된다면 그 시스템은 안전하다고 말한다. 그러나 완벽한 보안은 불가능하다.

대부분의 경우 보호 기법은 사고 회피의 핵심이다. 보안위반은 의도적과 우연한 것으로 분류할수 있는데, 의도적으로 위반하려는 사람들을 침입자, 해커, 크래커라고 한다. 덧붙여 threat은 취약성의 발견과 같은 보안위반의 잠재적 가능성이며 attack은 보안을 깨뜨리기 위한 시도이다.

공격 종류

  1. 기밀성 침해 - 인증 없이 자료 읽기(정보 절도)
  2. 무결성 침해 - 인증 없이 자료 변경하기
  3. 가용성 침해 - 인증 없이 자료 파괴하기
  4. 서비스 가로채기 - 인증 없이 자료 사용하기
  5. 서비스 거부 - 시스템의 적법한 사용을 막음. DOS(denial of service)

공격 방법

  1. 가장 - 다른 사람인 척해서 인증 권한 가로채기. 가장 일반적인 공격이며, 주고바는 데이터를 가로채서 다시 보냄

  2. 되풀이 공격 : 정상적인 데이터를 부정한 방식으로(또는 무한히) 다시 보내기

  3. 중간자 공격 : 통신상의 데이터 흐름 중간에 공격자가 자리잡고 수신자/송신자에게 각각 송신자/수신자인척 하기 세션 하이재킹

  4. 권한 상승 : 광범위한 공격유형이며, 공격자에게 보다 많은 권한을 할당한다.

    악의적인 오용으로 부터 시스템을 완벽히 보호하는 것은 불가능하지만, 침입 비용을 충분히 커지도록 만들수는 있다.

필요한 보안 대책

  1. 물리적 : 표적 컴퓨터가 상주하는 건물에 대한 액세스를 제한하기
  2. 네트워크 : 네트워크는 외부자원이 시스템으로 액세스할 수단이지만 무단 액세스를 제공할 가능성이 있다. 통신 중단은 원격 서비스 거부 공격을 구성하여 사용자의 시스템 사용 및 신뢰도를 떨어뜨릴 수 있다.
  3. 운영체제 : 운영체제, 응용 프로그램, 서비스 집합은 많은 취약점을 가진 거대한 코드베이스이다. 지속적인 패치를 통해 공격 영역을 줄이고 침입을 피하도록 강화되어야 한다.
  4. 응용 프로그램 : 타사 응용프로그램, 특히 권한을 가진 프로그램은 위험을 초래할 수 있다. (완벽한 방지는 불가능함)

보안 계층

그외에도 또 다른 요소는 인간이 있다 : 피싱..등

16.2 프로그램 위험

프로그램이 보안침해를 유발할때 사용하는 기법들.

16.2.1 악성 코드

악성 코드는 컴퓨터 시스템을 손상하도록 설계된 SW다.
단순히 명시된 기능을 수행하는 대신 비밀스럽거나 악의적인 방식으로 작동하는 프로그램을 트로이 목마라고 한다. 프로그램이 다른 도메인(수행하는 사용자의 접근 권한 영역)에서 수행된다면 권한이 상승될수있다.
ex) 카메라 어플이지만 사용자의 연락처에 접근하여 원격서버로 밀반출하는 앱

트로이 노새 : 트로이 목마의 고전적인 변형으로 로그인프로그램을 흉내낸다.

  • ex ) 네이버를 따라한 가짜 로그인 창
    이 유형의 공격은 대화형 세션이 끝날때 운영체제에서 사용법 메시지를 출력하게 하여 무력화시킬수있다. 또는 사용자가 url을 잘 확인하던가

스파이 웨어 : 트로이 목마의 또다른 변형으로 유저가 설치한 프로그램에 종종 딸려온다.
ex) 사용자 시스템에 광고 보여주거나 특정 사이트를 방문 시 팝업 윈도우를 띄우는 등 스팸 발송을 하고, 사용자의 정보를 뺴냄

랜섬 웨어 : 대상 컴퓨터의 일부분을 모두 암호화하여 소유자가 액세스할 수 없게한다.

트로이 목마 및 악성코드는 최소 권한의 원칙을 위반하는 경우에 번성한다. 따라서 운영체제는 디폴트로 일반사용자에게 최소한의 권한을 주어야한다. (관리자 함부로 주지 않는다) 운영체제의 고유한 면역시스템은 이때 효과가 없기 때문에 악성코드가 범위를 확장하기 쉬워진다. 또한, 권한 제어기능은 관리하기 쉽고, 이해하기 쉬워야한다.(오해할만한 보안 조치는 안좋음)

트랩도어 : 프로그램이나 시스템 설계자는 소프트웨어에 자신만 사용할 수 있는 약점을 남긴다. 특정 ID, 비밀번호를 받으면 일반적인 보안절차를 우회한다.
ex) 프로그래머가 코드에 반올림 오류로 간혹 생기는 0.5센트를 자기계좌에 입금시키는 바익으로 횡령할 수 있다.

트랩 도어는 특정 논리조건(논리폭탄)에서만 작동하며, 이 경우 중 백도어는 특히 탐지하기 어렵다. (피해를 받은 후 수년동안 활동하지 않을 수도 있다.)

컴파일러에 교묘한 트랩 도어를 넣을 수도 있다. 이경우에는 원천 코드를 아무리 찾아도 문제점을 찾지 못해 더욱 위험하다. 이러한 유형에 대응할수 있는 방법은 코드 검토이다. 제출한 코드를 한명이상의 개발자가 코드를 검토 후 승인하는 방식이다. (ex git)

16.2.2 zhem wndl

대부분의 sw는 악성이 아니지만 코드 인젝션 공격으로 보안에 심각한 위협을 제기할 수 있다.
이 방법은 실행가능한 코드가 수정되거나 추가되므로, 악의가 없는 SW더라도 악용될경우 공격자에게 코드가 코드를 장악할 수 있다.

코드 주입 공격은 거의 포인터를 통한 직접 메모리 액세스를 허용하는 열악하거나 안전하지 않은 프로그래밍 패러다임 결과이다. C같은 저수준 언어에서 발견되며, 메모리 버퍼 크기를 신중하게 정해야 한다.

코드를 보면 버퍼 크기가 0으로 되어 있다.


버퍼 크기떄문에 오버 플로가 일어나는 경우

unnoticed : 패딩이 짤려나가서 아무런 영향X
outcom : logic... 스택이 침범당하고 이 오버플로는 프로그램 크러시를 일으킨다.
outcom : code.. 패딩을 크게 초과해 함수의 모든 스택프레임이 덮어쓰인다. 그 안에는 함수의 복귀주소가 있고, 이때 프로그램 흐름은 공격자에 의해 공격자가 제어하는 메모리, 다른 메모리 등으로 변경될 수 있다. 그리고 주입된 코드가 실행된다.

공격자는 execvp(shell) 시스템 콜로 셸 프로세스를 만들어내 권한을 가지고 셸 코드를 실행시킨다.
그 외에도, 힙에서도 악용될 수 있음

16.2.3 바이러스와 웜

바이러스 :
자신을 복제하고 다른 프로그램을 감염시킨다. 파일을 변경하고, 파괴, 시스템 크래시를 유발하거나 오동작을 일으켜 시스템을 망친다. PC사용자에게 치명적이다.(UNIX나 그 외에는 운영체제가 쓰기 보호를 해 영향력이 제한적이다.)

보통 스팸 이메일, ㅍ싱공격, 바이러스성 프로그램, 감염된 디스크 교환으로 확산된다.

웜 : 인간 활동이 필요한 바이러스와 달리 네트워크를 사용하여 스스로 복제한다. (매크로)
일반적으로 사용자의 연락처에 있는 다른 사람에게 자기 자신을 전자 메일로 보낼 수 있다.

작동방식 :
바이러스 투하기(dropper)프로그램이 바이러스를 시스템에 집어 넣는다. 한번 설치된 바이러스 는 다음과 같은 행동을 수행한다.
1. 파일 : 자기 자신을 파일에 덧붙여 프로그램의 시작부분을 자신의 코드로 점프하도록 실행시킨다. (온전한 바이러스 파일이 없어 제거하기 어려워짐)
2. 부트 : 시스템의 부트섹터를 감염시켜 운영체제보다 먼저 실행시킨다. 파일 시스템에 나타나지 않아 메모리 바이러스라고도 한다.
3. 루트킷 : 운영체제 자체에 침투해 시스템을 완전히 손상시킨다. (더이상 탐지도 불가능)
4. 매크로 : 저수준언어로 작성되지 않고 고급언어로 작성되어 매크로를 실행하는 프로그램이 실행되면 촉발된다.
5. 소스코드 : 소스를 찾고 바이러스를 포함하도록 그것을 수정, 퍼지도록 도와준다.
6. 다형태 : 설치될때마다 변화한다. (시그니처, 식별 패턴의 변화)
7. 암호화 : 탐지를 피하려고 암호화됨. 바이러스는 먼저 복호화된 다음 실행된다.
8. 스텔스 : 감시하는 시스템의 일부를 변경한다. ex) read()를 변형시켜 자신이 변경한 파일이 읽히면 변경전의 코드를 돌려준다.
9. 다부분 : 시스템의 여러부분을 감염시킨다.
10. 무장 : 난독화 되어있다.파일 속성을 볼수 없게 숨기는 등 찾기 어렵다.

16.3 시스템과 네트워크 위협

프로그램 위협은 그자체만으로 심각한 보안 위협이다. 운영체제가 개방적일수록 더 많은 서비스를 허용하고, 더 많은 기능을 허용해 악용버그의 가능성이 높아진다.
secure by default: 운영체제는 디폴트로 안전해지려고 하며, 공격 표면을 감소시킨다.

모든 해커는 흔적을 남기기 때문에, 해커는 좀비 시스템에서 공격을 시작한다. 스스로가 감염 된 줄 모르는 채 할일을 계속하지만 사실을 해커가 공격을 행하고 있는 것이다.

  • 이때문에 하찮은 시스템이라도 보안을 유지해야한다. 해커의 요새가 되는 것을 막기 위해.

16.3.1 네트워크 트래픽 공격

스니핑 - 공격자는 수동적이며 네트워크 트래픽을 가로챈다.
스푸핑 - 더 공격적이며 트랜젝션을 가로채거나 수정할 수 있다.(당사자로 위장하거나.)

16.3.2 서비스 거부

시스템의 정당한 사용이 불가능해진다. 실제로 정당한 사용을 막는게 시스템을 뚫는것보다 쉽다.
주로 네트워크 기반으로 이루어지며,
1. 너무 많은 시스템 자원을 뺏아가거나
2. 한 설비의 네트워크를 못 쓰게 한다.
방지가 특히 어려운 것이 분산서비스(DDos) 공격이다. 여러 사이트에서 여러 좀비들에 의해 하나의 목표를 공격하는 것이다. 점점 보편화되고 있다. 특히 가끔 사이트는 일시적인 과사용인지 해커의 침입공격인지 알아내지 못한다.

16.3.3 포트 스캐닝

해커가 시스템의 취약성을 탐지하는 수단이다.
담당자 역시 실행중이 아닌 서비스를 감지하기 위해 사용한다.
..? 링크를 달아둠..

16.4 보안 도구로서 암호기법

가장 유용한 도구중 하나다.
격리된 하나의 컴퓨터는 송신자와 수신자를 명확하게 결정하고 모든 프로세스 통신을 제어할수 있다. 그러나 네트워크 동신의 경우에는통신이 도청당하는지 완벽한 파악이 어려워(신뢰X), 송신자와 수신자의 주소를 암호화를 시킨다. 이 암호 기법에는Key 가 사용되니ㅡㄴ데, 송신자는 사진의 메세지를 암호화하여 특정한 키를 가진 컴퓨터만 해독하게 해준다.

16.4.1 암호화

하나의 암호화 알고리즘의 요소

  • key 집합 K

  • 메세지 집합 M

  • 암호문 집합 C

  • 대칭 암호화 알고리즘 : 암호화의 복호화의 키가 같으므로 k의 비밀을 반드시 유지해야 한다.

    가치..가치??..사진보고 이게뭔지 알아내봐용...

  • 비대칭 암호화 : 암호화와 복호화의 키가 다르다. 공개키, 개인키가 있다.

비대칭의 경우 계산비용이 훨씬 크다.

  • 인증 :

    대칭알고리즘을 사용하는 메시지 인증 코드
    디지털 서명 알고리즘 등이 있다.

  • 키 분배 : 열쇠고리라고 생각하면 된다. 공개키는 보안을 유지할 필요가 없다. 사용자는 단 하나의 비밀키를 가진다.

16.4.2 암호의 구현

네트워크 프로토콜은 layer로 조직되며, 각 계층은 바로 아래계층의 클라이언트이다.

.・゜-: ✧ :- 뭐라는겨.. -: ✧ :-゜・.

예시 -
TLS 암호 프로토콜 : 디지털 서명을 포함한다.

16.5 사용자 인증

사용자 인증은 사용자의 소유물(키) 사용자의 (idpw), 사용자의 속성(서명)에 기반을 둔다.

16.5.1~3 패스워드

  • id로 사용자의 신원을 밝힌다.

  • 시스템은 패스워드를 요구하고 시스탬 내에 저장된 pw와 비교하여 인정한다.

  • 이해와 이용이 쉬워 극도로 보편화되었다.

  • 한번 노출되면 무조건 뚫린다.

  • 침입자가 사용자의 정보를 알거나(집 비밀번호), 모든 가능한 조합을 시도하거나, 모든 단어, 단어변형 등을 시도할 수 있다.

  • 어깨 파도타기(어깨너머로 키보드치는걸 훔쳐본다. 냄새맡기라고도 함) 이래서 암호를 입력할때 *를 뜨게 한다.

  • 키 입력을 복사하는 프로그램을 몰래 설치해서 패스워드를 뺴돌릴수도..

  • 제일 좋은 방법은 주기적인 패스워드 변경 강요이다.


이러한 모든 접근법의 문제는 패스워드가 비밀을 유지하기 어렵다는 점이다.
하나의 방법으로는 패스워드를 저장할때 해시화 시켜서 저장하면 된다. 해시함수만 안 들키면 뚫리기 어렵다.

또는 일회용 패스워드를 사용한다. (냄새맡기 방지) 시스템은 챌린지를 내고, 사용자는 정확한 답을 respond한다.

그 외에도 생체 측정이 있다.

16.6 보안 방어의 구현

깊은 보안 : 더 많은 보안층이 훨씬 안전하다.

16.6.1 보안정책

  • 응용코드는 사용전에 검토한다
  • 사용자들은 암호를 공유하지 못한다.
  • 6개월에 한번씩 포트 스캔을 한다
    등의 여러 정책이 있고, 모든 사람들은 정책에 대해 잘알아야한다. 또한 정책은 정기적으로 갱신되고 점검되어야 한다.

16.6.2 취약점 평가

위험평가.....포트스캔까지 취약점을 찾기 위한 많은 노력을 한다. 특히 침입테스트를 통해 평가한다.

-ㅂ안 스캔에 의해 발견된 문제점을 자동/수동으로 보고되고 고쳐진다.

16.6.3 침입 방지

성공한 침입을 탐지하고 적절한 대응을 취한다.
-침입방지시스템 : IPS

  • 서명 기반 탐지
  • 이상 탐지
    의 방법으로 침입을 탐지하고 방지한다.

16.6.4 바이러스 보호

바이러스 명령어, 패턴을 찾아 제거하고 프록램을 치료한다. (알약)

16.6.5 감사, 회계,로깅

auditing, accountion, logging
성능은 비록 감소되지만 보안, 여러 영역에서 유용하다.기록을 남겨 이상징후를 발견하기 쉬워진다.

16.6.6 방화벽

신뢰하는 시스템 | 방화벽 | 신뢰모하는 시스템

힝 . .ㅠㅠㅠㅠㅠ
방화벽의 종류로는

  • 개인 방화벽
  • 어플리케이션 프록시 방화벽
  • xml 방화벽
  • 시스템 콜 방화벽

16.6.7 기타..

ASLR, 등등..

16.6.8 요약

너무..쓰기귀찮은데 그냥 컴퓨터 사용방법임

0개의 댓글