1. SEAndroid이란 무엇인가?

 

SEAndroid은 Security-Enhanced Android의 약자로, 안드로이드 운영체제의 보안성을 높이기 위해 구글에서 개발한 보안 프레임워크입니다. SEAndroid은 SELinux(Security-Enhanced Linux)을 기반으로 구현되어 있으며, 안드로이드 운영체제에서 실행되는 프로세스, 애플리케이션 및 시스템 리소스에 대한 접근을 통제하고 보호합니다. 현재 대부분의 안드러이드 스마트폰에 내장 탑재 되어 있습니다.

 

2. SEAndroid의 원리

 

SEAndroid은 안드로이드 운영체제의 SELinux 보안 기술을 사용하여 보안을 강화합니다. SELinux은 MAC(Mandatory Access Control) 방식을 사용하여 시스템 자원에 대한 접근을 통제합니다. MAC 방식은 사용자가 정책에 따라 허가된 접근만 허용하는 방식으로, 사용자의 권한에 따라 접근 권한을 결정하는 DAC(Discretionary Access Control) 방식과는 다릅니다.

SEAndroid은 안드로이드 시스템의 파일 시스템, 네트워크, IPC(Inter-Process Communication), 데몬, 애플리케이션 등 모든 부분에서 SELinux를 사용하여 접근 제어를 강화합니다. SEAndroid은 또한 안드로이드 애플리케이션에 대한 검증과 인증을 수행하는데, 이를 통해 악성 코드나 해킹 시도를 방지할 수 있습니다.

 

3. SEAndroid의 제작자는 누구인가?

 

SEAndroid은 구글에서 개발되었습니다. SEAndroid의 초기 개발은 NSA(National Security Agency)에서 시작되었으며, 이후 구글에서 관리하고 발전시켜 현재의 SEAndroid이 만들어졌습니다.

 

4. SEAndroid의 장단점

 

SEAndroid의 가장 큰 장점은 안드로이드 운영체제의 보안성을 크게 향상시킨다는 것입니다. SEAndroid은 안드로이드 운영체제에서 실행되는 모든 프로세스, 애플리케이션 및 시스템 리소스에 대한 접근을 통제하므로, 악성 코드나 해킹 시도를 막을 수 있습니다.

하지만 SEAndroid은 보안성을 강화하는 대신 일부 애플리케이션의 성능에 영향을 미칠 수 있다는 단점이 있습니다.

 

5. SEAndroid의 구동 원리

 

SEAndroid은 안드로이드 운영체제의 SELinux 보안 기술을 사용하여 보안을 강화합니다. 구동 원리는 크게 다음과 같은 과정으로 이루어집니다.

  1. 안드로이드 시스템 초기화
    • 안드로이드 시스템 초기화 단계에서 SEAndroid 보안 정책을 설정합니다.
    • SEAndroid 정책은 /system/etc/selinux 폴더에 저장되어 있습니다.
  2. SEAndroid 보안 정책 적용
    • SEAndroid 보안 정책은 SELinux 정책을 기반으로 하며, 모든 시스템 리소스에 대한 접근 권한을 통제합니다.
    • SELinux 정책은 시스템 레벨 및 애플리케이션 레벨에서 각각 적용됩니다.
  3. 애플리케이션 실행
    • 애플리케이션 실행 시, SEAndroid은 애플리케이션에 대한 SELinux 정책을 적용합니다.
    • 애플리케이션이 실행되는 동안, SEAndroid은 SELinux 정책을 기반으로 애플리케이션의 권한을 통제합니다.
  4. 시스템 리소스 접근
    • 애플리케이션이 시스템 리소스에 접근하는 경우, SEAndroid은 SELinux 정책을 기반으로 접근 권한을 통제합니다.
    • 시스템 리소스에 대한 접근이 SELinux 정책에 따라 허용되지 않는 경우, SEAndroid은 애플리케이션의 접근을 차단합니다.

위와 같이 SEAndroid은 안드로이드 시스템 초기화, SEAndroid 보안 정책 적용, 애플리케이션 실행 및 시스템 리소스 접근 등의 과정을 통해 안드로이드 운영체제의 보안성을 강화합니다.

selinux를 리눅스 우분투에 설치하는 것은 매우 쉽다.

하지만 한가지 명심 해야하는 것은 selinux의 차단률이 매우 높기 때문에 apt (Advanced Packaging Tool : 우분투의 고급 패키지 관리 툴)가 enforcing 상태에서는 제대로 동작하지 않는 다는 것이다.


만약 패키지 설치가 필요하다면 selinux의 상태를 enforcing에서 'permissive'로 바꾸어 주어야 마땅하다.

만약 그렇지 않다면 apt postinst(패키징 설치시 동작하는 필요 스크립트)가 제대로 작동 하지 못하고 리턴 오류가 연달아 발생할 것이다.

리눅스 우분투에서의 설치 방법은


-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>

// 일반 레파시토리에서 selinux를 설치 한다.


user@user-test:~$ sudo apt install selinux


-> 콘솔창에서 사용권 계약에 대한 내용이 뜨면 '동의(Agree)'


// 하위 스크립트 오류 발생하니 dpkg --configure로 잡아줌


user@user-test:~$ sudo dpkg --configure -a


// 재부팅 한다.


user@user-test:~$ sudo reboot


// 재부팅 후 selinux가 enable (자동 양호) 상태인지를 확인한다.


user@user-test:~$ sestatus

    {
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             ubuntu
    Current mode:                   permissive
    Mode from config file:          permissive
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      30
    }
-> 상황목록이 위와 같이 제대로 뜨면 정상적으로 설치된 것이다.

// enforcing 으로 전환을 테스트 한다.

user@user-test:~$ sudo setenforce 1
user@user-test:~$ sestatus
    {
    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             ubuntu
    Current mode:                   enforcing
    Mode from config file:          permissive
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Max kernel policy version:      30
    }
-> 여기까지 했다면 귀하의 pc에는 selinux가 정상적으로 설치되고 작동 되고 있는 것이며 'setenforce 1' 명령으로 currunt mode가 'permissive'에서 'enforcing'으로 바뀐 것을 확인 할수가 있다.


     
하지만 명심해야 하는 것은 selinux가 깔려 있다고 해서 부팅시 곧바로 고급 차단 정책인 'enforcing'이 바로 작동 되는 것은 아니며,
permissive에서 enforcing으로 모드를 바꿔저야 완전한 차단 정책이 적용 되는 것이다.

뿐만 아니라 또 앞서 말했듯이 소프트웨어를 설치 하는 과정인 apt를 활용 하려면 'permissive' 로써 정책을 변경해 줘야만 한다.


enforcing -> permissive 변경 하는 방법



-- 터미널 텍스트 박스 (Terminal text box) --

<Drag와 복사가 가능합니다.>


user@user-test:~$ sudo setenforce 0 




영상을 통하여 확인해 보도록 하자.



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린 점, 더 궁금한 부분이 있는 것 같다면 꼭 댓글로 알려 주시 감사 하겠습니다.

         






많은 사람들이 대부분 이제는 공유기를 보유 하고 있고 그리고 직접 와이파이 구성까지 각 가정마다 혹은 상점 마다 구성하고 있다.

물론 간단한 보안 체계는 서비스 자체적으로 지원 되고 있긴 하지만 유.무선 공유기는 상당히 많은 보안적인 헛점 요소를 지니고 있는 만큼

상세한 공유기 관리자 설정을 통하여 네트워크 보안을 이룩하는 것이 바람직 하다.

우선 유.무선 네트워크 보안을 크게 몇가지로 나눠 보도록 하자.

1. 안전한 DNS 직접 설정 (바로가기)

패킷의 정보가 흐르는 DNS는 보안성이 매우 중요하다.
제공자나 혹은 제3기관, 제3자 혹은 DNS를 해킹한 해커에 의하여 패킷의 정보가 그대로 노출 될수 있기 때문이다.
뿐만 아니라 대부분의 파밍 해킹이 이 DNS변조를 통해 이루어 진다.

주기적으로 DNS를 확인하는 것이 중요하다.

2. 공유기 무선(wifi) 보안성 강화

상당히 중요한 설정이다.

무선 와이파이를 설정하게 되면 주위의 해커가 그 경로를 통해서 공유기의 admin에 접속 할 수 있으며 'mac 접속 제어'를 통하여 다른 외부기기가 wifi에 접속 하지 못하도록 방어 대책을 구상해야 할 뿐만이 아니라 무선 보안 방식 또한 반드시 'WPA/WPA2 PSK' 로써 구축 해야 마땅하다.

이를 통해 당신이 설정한 와이파이에 주위에 있는 해커가 무선네트워크로 침투 하는 것이 어려워 진다.

3. ADMIN 접속 제어 설정

사실 첨단해킹 기술 중에는 사용자의 라우팅 접속을 통한 외부 네트워크에서 접속이 공유기의 admin으로 가능할수 있다.

이를 방어하기 위해서는 외부 원격 접속 해제와 더불어 admin 접근 제어 설정을 해서 설정을 점유받은 pc만 어드민 접속을 가능하겠금 하는 것이 바람직하다. 

 iptime공유기가 이 설정을 지원한다.

도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.


그리고 글에 부족한 점이 있거나 틀린점이 있는 것 같다면 꼭 댓글로 알려 주시면 감사 하겠습니다.




리눅스는 애당초 배포판이 데스크탑 os과 서버용os으로 나누어 진다.


다시 말해 외부에서 원격으로 제어 할수 있는 서버 프로세스 모듈은 애시당초 데스크탑 버전에 포함되어 있질 않다.
일반적인 데스크탑 os는 외부에서 rdp를 활용한 원격제어가 이루어 지지 않는다.
애시당초 rdp-server 모듈을 만들어내는 패키지인 'xrdp'가 기초적으로 깔려 있지 않기 때문이다.

리눅스는 기초적으로 유닉스 파일시스템 으로서의 공유성 또한 'chmod'를 통하여 각 파일과 폴더에 대한 외부 접근 권한을 지정할수 있을 뿐만 아니라
데스크탑 os인 경우 애초에 ftp모듈이나 samba 모듈등이 설치 되어 있질 않기 때문에 외부 접속으로 파일시스템이 기초적으로 유출되는 일이 있을수가 없다.

허나 만약 당신이 어떤 새로운 데스크탑 배포판을 받았는데 'xrdp, samba, vnc-server' 등 모듈이 설치 되어 있고 동작하고 있다면 배포한 자의 의중을 의심해 보고 어떻게 모듈이 동작하는지에 대해 알아볼 필요가 있을 것이다.


다시 말하지만 서버 서비스에 관련한 이러한 패키지들은 '서버가 아닌 데스크탑 운영체제 배포판'에는 그것들이 처음부터 설치 되어 있지 않아야 정상이다.

뿐만 아니라 리눅스에서 제공하는 방화벽 모듈은 ip 대역과 포트 대역 방어가 가능하며 이것은 국지적인 친입 방지 까지 계획 할수가 있다.
예를 들어 어떤 나라에서의 ip접속은 이루어 지지 않도록 구성하는 것이 가능하다.
그리고 서버 서비스를 이용하는 소프트웨어가 아닌 경우 방화벽으로 모든 ip와 포트 대역을 하여도 다른 소프트웨어들을 활용 하는 데에는 전혀 문제가 없다.

또 한가지 중요한 것은 모든 소프트웨어는 기초적으로 콘솔을 첫번째 기반으로 동작하는데 여기서 리눅스는 소프트웨어 스스로 이든 외부의 원격 이든 간에 프로세스 스스로가 제멋대로 동작하는 것을 방어하는 시스템이 있는데 그 하나는 가장 유명한 selinux 이며 우분투에서 사용되는 apparmor등이 있다.

그것은 윈도우즈에서 사용하는 일일이 컴퓨터 전반을 감시하는 백신 소프트웨어들과는 현저히 다른 tty-cli를 차단하는 원천 방어 시스템이다.

마지막으로 로그(log)에 대해서 알아보자.

보안에서 로그 기록을 확인하는 가장 중요한 사항 이다.

가장 먼저 '/var/log/syslog' 파일을 통해서 시스템의 전반적인 동작 변화 사항을 쉽게 확인 할수 있으며

예를 들어 방화벽인 ufw를 사용하는 경우 '/var/log/ufw.log' 파일을 통해 기록을 확인 할 수가 있다.



도움이 되셨다면 '♡' 버튼을 꼭눌러 주시면 감사 하겠습니다.



이전 포스팅에서 dnscrypt-proxy 설치에 대해서 알아 보았다.


이전 포스팅 가기 ( [리눅스 우분투] DNS 간 트래픽 양중 암호화와 그 방법에 관하여 (DNScrypt) )


그리고 포스팅에서 dhcp에 의한 로컬 아이피 변경시에 발생되는 dnscrypt 오류 및 자동 해제에 관해서도 적었는데 당시에는 필자도 확고한 대책을 강구 하고 있었기에


정확하게 집필하지는 못하였다.

하지만 오늘은 그것에 대하여 확고히 집필하고 또 가이드를 처음부터 할 생각이다.



// 먼저 dnscrypt를 설치 한다.

   $  sudo apt install dnscrypt-proxy

// 다음은 dns server를 재설정 한다.


     gtk 설정이나 혹은

    ' /etc/resolv.conf ' 파일을 설정한다.

    "nameserver 127.0.2.1"

    로 바꾸어 준다. 


// 네트워크 서비스를 재시작 한다.

    $  sudo service network-manager restart

// DNS leaktest를 수행해 보자.

   $  firefox http://www.dnsleaktest.com
      (firefox: 파이어폭스 브라우저)

 
       -- 로 접속하여 open DNS 설정이 제대로 되어 있는지 확인하여 보자.


// 만일 사용자의 인터넷 아이피 할당 방식이 'dhcp' 인 경우 ' /etc/rc.local' 을 수정하여
부팅시 발생하는 dnscrypt 트러블 슈트를 pc 스스로가 해결할수 있도록 스크립트를 작성해 놓자.


  // 자동 변동 된 dns 주소 '127.0.1.1' 을 127.0.2.1로 다시 수정 하겠금 한다.
   

sudo sed -i 's/127.0.1.1/127.0.2.1/g' /etc/resolv.conf


// dnscrypt-proxy 서비스 모듈을 다시 재시작 한다.
  

$  sudo service dnscrypt-proxy --full-restart

   

// 네트워크 모듈을 다시 재시작 한다.
  

$  sudo service network-manager --full-restart


 
     

리눅스를 유닉스를 기반으로 하고 있고

유닉스는 파일의 속성 권한을 2진법으로 구분 하고 있다.

이는 시스템 보안에서 가장 첫번째로 중요한 부분 으로써 외부 애플리케이션 등이나 외부의 일반적인 친입 등으로 부터 파일의 변조나 리딩을 보호 할수가 있다.

뿐만 아니라 파일의 실행 속성 가능 여부 까지 제어 하는 것을 기본 원칙으로 하고 있다.

즉 유닉스 시스템 에서는 모든 파일들이 실행 가능한 스크립트를 내장 하고 있다고 하여 실행이 가능한 것이 아니다.

관리자 혹은 제작자가 실행 가능 여부를 권한 변경 설정을 해줘야만 실행이 가능한 것이다.

이러한 관리툴을 대표적으로 'chmod (Changes mod)' 라고 하며 이 chmod 명령을 사용하여 해당 폴더나 파일의 권한 속성을 변경 할수가 있다.

모드의 종류는

크게 세 가지인 'R, W, X'로 나뉜다.

R = Read (읽기 가능)

W = Write (쓰기 가능)

X = Excute (실행 가능)



먼저 현재 사용자의 홈 폴더의 파일이나 폴더들의 속성을 보도록 해 보자.


// ls의 -la 속성 명령어로 파일의 속성까지 전부 출력 한다.

    $ ls -la

    -- 다음과 비슷한 화면이 뜰 것이다.

    drwxrwxr-x.   3 tester tester      4096  5월 16 02:40 test7
    -rwx--x--x.   1 tester tester      1715  5월  8 18:11 tested
    -rwx--x--x.   1 tester tester         5  5월  8 21:17 testo
    drwx--x--x.   3 tester tester      4096  6월 10 19:35 tmp
    -rwx--x--x.   1 tester tester       442  5월 10 23:41 ustat
    -rwxrwxr-x.   1 tester tester        10  5월 15 02:54 vi
    -rwx--x--x.   1 tester tester         7  5월 15 03:16 vic
    drwxrwxr-x.   2 tester tester      4096  7월 25 13:57 video
    drwxrwxr-x.   2 tester tester      4096  8월  4 15:47 wine
    drwxrwxr-x.   2 tester tester      4096  7월 20 17:57 workspace
    drwx--x--x.   2 tester tester      4096  4월 29 17:59 공개
    drwx--x--x.   2 tester tester     12288  8월  4 12:42 다운로드
    drwxrwx--x.   2 tester tester      4096  8월  4 14:43 문서
    drwxrwx--x.   2 tester tester      4096  8월  4 15:36 바탕화면
    drwx--x--x.   2 tester tester      4096  8월  4 02:09 비디오
    drwx--x--x.   2 tester tester      4096  8월  4 03:39 사진
    drwx--x--x.   2 tester tester      4096  5월 11 20:46 음악
    drwxrwxr-x.   2 tester tester      4096  5월 17 11:43 이름 없는 폴더
    drwxrwxr-x.   3 tester tester      4096  5월 17 11:37 이름 없는 폴더 2
    drwx--x--x.   2 tester tester      4096  4월 29 17:59 템플릿

    (  속성    )          (사용자 이름)               (파일이나 폴더 이름)



   

여기서 '템플릿' 이라는 디렉토리의 속성 'drwx--x--x' 는 아래와 같이 3등분이 된다.

drwx / --x / --x :

사용자 / 그룹 / 외부(anonymous)


읽기,쓰기,실행/ 실행 / 실행

처음 drwx 의 'd'는 '디렉터리'를 의미 한다.

이것을 진수로 표기한다면


rwx / --x / --x =

111  / 001 / 001 =

(421) / (421) / (421) =

4+2+1 / 0+0+1 / 0+0+1 =

7    /     1    /   1


즉 해당 폴더에 대한 모드는 숫자표기로 '711'이 된다.


그렇다면 이제는 해당 '템플릿' 폴더를 'drwx/---/--- (절대 사용자만 읽기,쓰기,실행 가능)' 으로 속성 권한을 변경 하여 보자.



// 속성을 700으로 변경한다.

    $ chmod 700 템플릿

// 속성을 재확인 한다.

   $  ls -l |grep 템플릿
         (grep 은 출력에서 원하는 문자열이 있는 라인만 출력 시킨다.)
 
    - 다음과 같이 출력 되면 성공한 것이다.
 
    drwx------.  2 tester tester      4096  4월 29 17:59 템플릿



이와 같은 방법은 파일에서도 똑같이 적용 되며


* 만일 디렉터리일 경우 속성을 '6xx'로 할 경우

    $ chmod 600 폴더

    - 폴더 속성이 drw------- 으로 변경됨으로 x(실행) 속성 권한이 사라짐으로 폴더로 진입 할수 없게 된다.

    - 뿐만 아니라 그룹 속성까지 제로로 한다면 'ls' 같은 일반 프로그램도 타 소프트웨어들도 접근을 못하게 된다.
    (해당 폴더에 들어가서 ls를 실행할 경우 진행 되지 않는다.)   
즉, 그룹 권한을 생각하여 최소한 '750(rwxr-x---)' 이상으로 권한을 부여 하는 것이 일반적이다.





또한 해당 디렉토리 하부의 모든 파일과 폴더들을 전부 똑같이 적용 시키려면



// -R 속성으로 하부까지 전부 적용 시킨다.

   $ chmod -R 770 폴더
 
// 하위까지 속성을 한번에 확인해 본다.

   $ ls -lR 폴더



이전 포스팅 에서 clipman 소프트웨어 소개와 설치를 이야기 했다.


그래서 더욱 거기에 가미를 더하여 clipman의 내부 캐쉬의 보안 설정을 가이드 하려고 한다.


저장되는 캐쉬 데이터는 '/home/user/.cache/xfce4/clipmand/textsrc'로 저장 되는데
보통 이 파일의 권한은 'rw-rw-r'(664) 이지만 만약 이 보안설정이 불안 하다면 직접적으로 'rw-rw-'(660) 으로 바꾸어 주면 된다.


// 먼저 xfce4-clipman 소프트웨어 의 cache 폴더로 진입한다.


cd ~/.cache/xfce4/clipman


// 'textsrc' 파일이 있는지 확인한다.


ls


// 해당 파일의 보안 권한을 변경한다. < 'rw-rw-'= (660) > 


    chmod 660 textsrc


-- 이로써 보안을 한층 더 강화 시킨다.




 이렇게 해도 소프트웨어를 사용하는 데에는 전혀 문제가 없다.



UFW란? Linux의 핵심인 커널은 Server에 대한 Client의 Network 접속을 제어하는 netfilter라는 Module을 가지고 있는데 바로 netfilter를 사용하여 Filtering를 수행하는데, 이것을 이용하여 Server 접속에 대한 Network 정책을 세우는 Program이 바로 FirewalL(방화벽) 이다. 특히 이러한 필터중 리눅스에서 가장 많이 사용하는 것이 Iptable 이다. 그러나 이 기본 모듈 소프트웨어만 가지고는 절차상 번거로운 면이 있기 때문에 iptable의 작업을 간편화 해주는 소프트웨어가 바로 UFW(Uncomplicated FireWall)이다. 
그리고 이런 UFW를 그래픽툴로서 제공하는 것이 GUFW라고 볼수 있다. 

하지만 UFW를 설치 하였다고 해서 바로 방화벽이 작동되는 것은 아니다. 시스템 시작시에도 방화벽이 백그라운드에서 자동으로 활성화 되게끔 하기 위해서는 터미널에 다음과 같이 입력을 해준다. 

$ sudo ufw enable 
이렇게 하면 시스템 시작시에도 스타트가 적용이 된다. 오히려 gufw 에서는 킷에서 활성화를 시켜도 리붓시 활성화가 적용이 안되는 경우가 많다. 
그렇기 때문에 완전한 활성화를 위해서는 터미널에서 작업을 하는것이 바람직하다.

하지만 만약에 리눅스를 통해 서버를 이용하고 있다면 서버 접속을 방화벽에 규칙을 추가해야 한다. 그렇지 않으면 서버접속 또한 방화벽에 의하여 이루어 지지 않는다. 그리고 만약 서버가 OpenSSH라면 다음과 같이 입력한다. 

$ sudo ufw allow ssh
그리고 allow(허용) 뒤에는 서비스명 대신 service 포트를 직접 입력 하여도 된다. 
끝으로 방화벽의 상태를 확인해 보려면 크게 두가지로 할수 있다.

$ sudo ufw allow from *.*.*.* (ip)
특정 ip 접속을 허가 하게 한다.

$ sudo ufw status
상태 확인

sudo ufw status verbose
상세 확인

$ sudo ufw deny from *.*.*.*(ip)
특정 아이피를 차단한다.

$ sudo ufw deny x:x/tcp
tcp 프로토콜에서 x포트 부터 x 포트까지의 접속을 차단한다.

$ sudo ufw deny x:x/udp
udp 프로토콜을 통해 들어오는 x포트 부터 x 포트까지의 접속을 차단한다. 


+ Recent posts