Giter Club home page Giter Club logo

securitybootmanager's Introduction

SecurityBootManager CoreLibrary

This project is core-library that collects information on the bootloader level.

Build Status codecov GitHub license

Project Introduce

본 프로젝트는 운영체제가 부팅되기 전 단계인 커널이 로드되기 전에 동작하여 수집하고자 하는 장치에 접근하여, 노트북이라면 일체화된 Camera, Wireless Network NIC, Ethernet 통신, 부팅된 시간, 위도 & 경도 등을 이용 할 수 있는 기반 Framework 를 제작하는 것이 목표인 프로젝트로써, 저희 Framework를 이용하게 될 경우 Target Machine 에 설치 되어있는 운영체제의 종류에 종속되지 않고 동작하여 정보를 수집 후 이를 자신의 창작물을 위한 기반으로써 이용이 가능합니다.

또한 수집된 정보는 추후 포맷으로도 삭제되지 않는 공간에 저장되도록 함으로써 해당 Framework 를 사용하여 구현하고자 하는 개발자들은 이러한 수집된 부팅당시의 전방 이미지사진, 접속당시 연결된 Wifi 정보, 아이피 주소를 기반으로 한 위도 & 경도 파악 등의 정보를 이용할 수 있습니다.

Demo Movie

2016-11-22 11 34 51

Project Introduce PPTX(PDF)

PDF Link : I_WILL_FIND_YOU_ Security Booting Manager .pdf

Lightening Talk PPTX

PPTX Link : IWillFindYou_Boot_Sequence_and_Hardware_Abstraction_in_Operating_system.pptx

Developer

@kbu1564 @JuHyun Yu @dong-Hwan,Jung

초기 프로젝트

초기 프로젝트

Development operating environment and Related metters

  1. OS : ubuntu 14.04
  2. Dependency Packages : build-essential flex bison texinfo autoconf automake gettext liblzma-dev

License

Used OpenSource List

securitybootmanager's People

Contributors

kanghoyong avatar kbu1564 avatar tyburn117 avatar yunheur avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

securitybootmanager's Issues

앞으로의 개선방향

  1. wpa지원 ==> 네트워크 드라이버 패치
  2. 프로젝트 정체성 찾기
    2.1 프로젝트 이름 리뉴얼
    2.2 프로젝트 readme 수정 (영문도 지원)
    2.3 경량화 시도 시 시스템 목적 및 요구사항 수정, 설계 리모델링
  3. 프로젝트 홍보 수단 강구
  4. 경량화 시도 (grub 유무 고려, 시스템 목적 경량화)

홧팅

SecurityBootManager Framework 작업

해당 기능들을 제 2의 서드파티 제작이 보다 간편할 수 있도록 Framework 화 작업을 진행해야함
이에 대한 토론과 보다 효율적인 방안에 대한 회의 내용 및 관련 이슈들을 이곳에서 다룰 예정

  1. 개발자 관점에서의 Framework 화 작업
  2. 폴더 구조의 변경 작업
  3. etc ...

Linux Camera DeviceDriver 포팅

WebCam 지원을 위해 Grub WebCam Module 을 직접 처음부터 개발하는 것은 불가능 하다고 판단
방향을 바꾸어 리눅스의 Camera 관련 Media Device Driver의 포팅 가능성에 초점을 둠

리눅스의 HAL 계층의 맵핑 구조와 방식을 파악하여 Grub 에서 리눅스의 Device Driver 구동방식을 연결하는 것을 중점으로 분석할 예정

리눅스의 Cam 관련 디바이스 드라이버 분석을 통해 Grub Module 형식으로 포팅 가능여부에 대한 분석 및 이슈 시작

본 프로젝트의 라이선스 문제 관련

해당 이슈에 대한 논의를 다른 Repository에서 진행

D2CampusFest/3rd#27 [SecurityBootManager] GPLv2.0 + GPLv3.0 LICENSE 문제

라는 이슈명으로 진행중 해당 이슈가 논의 되어 결론에 도달할 경우 본 이슈도 Close 처리 예정

한가지 알게 된점

GPLv2.0은 GPLv3.0의 포함관계에 존재하지 않는 다는것.
둘간에 호환 되는 라이센스 버전이 존재하며 이를 호환되지 않도록 명시한 버전이 존재한다.
자세한 내용은 링크 참조

가상 Wifi환경 만드는 법[찾는 중]

필요 한 것

  1. 가상 wifi환경 (wpa2, wpa, open)
  2. wifi를 연결할 수 있는 가상 NIC

....
문제점 1
wifi를 연결할려면 기본적으로 어떤 wifi신호와 연결할 것인지 선택해야 하기 때문에
연결할 기기의 SSID를 알아야 하며, 연결을 하고자 해도 권한을 가지고 있어야 하기 때문에
그 권한을 풀기 위한 키를 가지고 있어야 한다.
자동으로 연결 할 수 있는 방법이 없을까?
그리고 만약 무료 와이파이가 근처에 없으면 wifi를 연결 할 수 있는 UI를 제공 해야 할 것이다.

문제점 2
또다른 문제점은 gPXE에서 제공하는 NIC가 있다는 것인데 이는 가상화로 만들기 힘들다.
그래도 혹시 모르니 일단 아무 wifi 환경을 만든 후 테스팅을 해보자.

grub -> syslinux 멀티부트로더 소스 분석 타겟 변경 관련

현재 iPXE의 경우 Grub 에서 채택하여 사용중인 기본 멀티 부트로더이며, 해당 프로젝트는 이더넷 통신 만을 지원
gPXE의 경우 Fedora 에서 채택된 기본 멀티 부트로더인 SysLinux 에서 사용중이며 무선 통신관련 네트워크 TCP/IP 기반 wireless가 지원되므로 잠시 환경 구축 및 분석 타겟 방향 변경

관련 이슈 : #5 #6 #9
@tyburn117 @kbu1564

iPXE의 ath9k 관련 칩셋 초기화 관련 컴파일 문제

ath9k 관련 칩셋을 사용하는 사용자가 컴파일을 시도하는 경우
일부 컴퓨터에서 ath_rxbuf_alloc() 함수에서 NULL 포인터를 리턴하여 메모리에 쓰기 시도하는 문제에 의해
운영체제 강제 재부팅 현상 발생

해당 원인의 정확한 문제 파악을 위해 iPXE Leader Developer 와 메일을 주고 받은 결과
소스문제라는 것을 인정받아 ipxe maintainer 가 수정사항을 진행 master 브렌치까지 적용

포럼 링크 : http://forum.ipxe.org/showthread.php?tid=7924
패치 커밋 : ipxe/ipxe@d0bfd83

grub2 의 기능이 ipxe 에서 대체 가능함에 따라 grub2 제외 관련

프로젝트를 분석하고 진행하면서 grub2 의 usb 제어 기능이 ipxe 에서도 동일하게 제공된다는 것을 파악하여, grub2를 프로젝트에서 제외 시키는 것이 가능해 질 것으로 생각 되어지고, 추가 ipxe 또한 모듈용 driver 제작이 가능하며 그 예시가 d4f1fd4

  • grub2 에서는 현재 IEEE802.11 규약을 지원하지 않는 상황
  • ipxe 에서는 현재 IEEE802.11 규약을 지원하는 상황

해당 이슈는 결승전 종료후 추후 프로젝트의 발전 방향에도 부합하는 중대 이슈이기에 함부로 판단은 이르다 생각되므로.
이슈를 오픈하여 충분히 토의 및 논의를 본 이슈를 통해 진행한 뒤 결정할 예정

ipxe local storage 에 있는 운영체제 부팅

USB로 부팅하는 경우 아래의 명령어를 실행하도록 잡아주면
최 우선순위로 현재 부팅중인 USB가 0x80이 되고 0x81의 경우 HDD or SSD로 잡히게 된다.

#!ipxe
sanboot --no-describe --drive 0x81

중계서버 설계

현재 중계서버는 자식 클라이언트 쪽의 MAC 주소를 기준으로 하여 hash_map 으로 그룹화하여 관리하는 서버이다.

  • 부모클라이언트 : 스마트폰[안드로이드]
  • 자식클라이언트 : PC

중계서버 UML
image

수정 해야할 사항

  • 디자인패턴
  • OCP 적용

ethernet 설정에 대한 초기 셋팅

이슈의 특성상 ethernet을 이용한 연동과 wireless 연동을 분리하여 이슈 관리할 필요성을 느껴 ethernet 연동 성공에 대한 설정 방법을 아래와 같이 공유함.

http 부팅시 수정할 필요 사항

우선 dhcp-server 의 패킷 요청들이 외부로 나갈 수 있어야 한다.
이를 위해 tap0 인터페이스와 eth0를 브릿지 하여 br0 인터페이스 장치를 통해 외부로 패킷이 나 갈 수 있도록 해야한다. 이를 위해 아래와 같은 작업을 거친다.

sudo brctl addif br0 tap0
sudo iptables tap0 0.0.0.0

위의 두 작업을 거쳐 tap0 장치의 인터페이스로 입출력되는 모든 패킷들을 br0 로 브릿지 해준다.
브릿지 작업이 끝난 뒤 본격적으로 dhcp 서버의 설정값을 수정해야하며 수정할 내용은 아래와 같다.

sudo vim /etc/dhcp/dhcpd.conf

위의 명령어를 통해 isc-dhcp-server  설정값을 아래와 같은 아이피 대역으로 수정한다.
수정하는 이유는 route -n 명령어로 확인시 알수 있다.
우리는 br0 를 통해 인터페이스 장치로 요청되는 아이피 라우팅 대역을 사용해야만 한다.

option domain-name "intranet.pj-room.com";
option domain-name-servers 168.126.63.1, 8.8.8.8;
option routers 10.0.2.2;
option subnet-mask 255.255.255.0;

default-lease-time 60;
max-lease-time 72;

allow bootp;
allow booting;

subnet 10.0.2.0 netmask 255.255.255.0 {
  range 10.0.2.100 10.0.2.200;
  option routers 10.0.2.2;
  host grub-core {
    hardware ethernet 52:00:00:00:00:01;
    filename "boot/grub/i386-pc/core.0";
  }
}

현재 외부로 나가는 아이피가 br0 인터페이스에 dhcp 형태로 10.0.2.15 아이피를 할당 받아 사용되어지고 있으며 이 장치는 10.0.2.2 의 라우터를 통해 br0 인터페이스로 요청되어 지므로 routers 옵션값을 외부로 나갈 수 있는 라우터쪽으로 아이피를 재 설정해 준다.
아래는 route -n 명령에 대한 본인의 결과 값이다.

bw@bw-VirtualBox:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 br0
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 br0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 br0

위와 같이 dhcp 서버의 값을 설정한뒤 한가지 작업을 더 해야한다. dhcp의 외부 서버 요청시 처리되는 기본 인터페이스 장치의 이름을 지정해야한다. 아래의 명령어로 수정한다.

sudo vim /etc/default/isc-dhcp-server

아래 내용으로 수정한다

bw@bw-VirtualBox:~$ cat /etc/default/isc-dhcp-server 
# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPD_CONF=/etc/dhcp/dhcpd.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPD_PID=/var/run/dhcpd.pid

# Additional options to start dhcpd with.
#   Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#   Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="br0"

여기서 중요한 것은 INTERFACES 옵션값이다 이 값을 통해 dhcp 서버가 외부로 요청되야만 하는 기본 인터페이스 장치가 무엇인지를 알수 있게 된다.

이렇게 설정한 후

sudo /etc/init.d/isc-dhcp-server restart

명령을 수행할 경우 정상적으로 부팅이 완료되게 되며 Grub 콘솔로 진입한뒤 아래의 명령을 입력할시 정상적으로 아이피 주소를 반환하면 성공한 것이다.

grub > net_nslookup www.pj-room.com
222.122.81.58
grub >

grub-net-load

참고 사이트 : http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/PXEBoot
위 사이트 보고 PXE 부팅 환경 구축 후 네트워킹 분석 하던거 계속 진행가능

아래의 명령어를 이용하여 pxeboot를 이용하여 부팅하게 될 모듈 및 core.0 이미지 파일 생성
--subdir 명령인지 뒤에 오는 값은 추후 pxe 부팅시 로드되는 기본 디렉토리 경로이다.

sudo ~/g2/usr/bin/grub-mknetdir \
           --net-directory=/srv/tftpboot \
           --subdir=boot/grub \
           --modules=tftp http

ipxe vesa/vga 관련 gui api 함수 제작

vesa/vga 초기화 작업 수행이 종료되어 gui 제작을 위한 기본 api 함수들의 제작이 필요함
이에 대한 것을 추가 모듈로 제작할 예정

연관 이슈 : #31 #47

api 함수 목록

  1. line draw eac225a
  2. circle draw 29169ff 93bb4a8
  3. rectangle draw eac225a 46b97e9
  4. dat 29169ff
  5. text print (printf) already

추가로 gui 모드를 제어하기 위한 방법이 필요함

  1. mouse device driver 제작
  2. keyboard 방향키를 이용한 제어

프로젝트 설치 및 사용시 어려움에 관한 이슈

프로젝트 설치 및 사용시 어려움에 관한 이슈
본 프로젝트를 이용하여 설치 시 현재의 상태에서는 문서화도 충분치 않은 상황이므로
어려움이 많다는 이슈가 제보 되었으며,

이 이슈는 프레임워크 설계시 중요한 방향이 될 수 있을 듯 싶어, 본 이슈를 오픈하게됨.

travis-ci 을 이용한 단위테스트 함수 dependency 설정 불가능 문제

Suggested-by : @formfoxk #27

현재 제작된 run-test.sh 쉘스크립트와 연동되어져 있는 travis-ci 의 구조적인 문제에 의해
외부에 정의되어있는 함수를 직접 끌어와서 사용하지 못하고

다시한번 복사 붙여넣기로 재 정의해야하는 중대 이슈가 존재함
해당 문제는 travis-ci 를 이용하려는 취지에 부합하지 않으므로 해당 이슈를 중대이슈로 설정하여

본 이슈를 다루기 위해 예전 브렌치를 다시 살릴 예정
또한 feature/travis-ci 브렌치는 이후 지속적으로 유지될 예정

root directory의 Makefile 생성

#32 root directory의 Makefile 생성

현재 Makefile 은 생성된 상태

  • compile-**(disk|net)mode.sh 와 run-(disk|net)**mode.sh 를 Makefile 을 이용하여 컴파일 및 실행이 가능하도록 수정 필요
  • Makefile 도움말 필요

setting TFTP

  • PXE Client는 TFTP를 이용하여 부트로더를 한다. 그러므로 TFTP서버를 운영해야 한다.

1. tftp 설치 및 설정

sudo apt-get install tftp tftpd
vi /etc/xinetd.d/tftp

내용을 다음과 설정해야 한다.

service tftp 
{ 
    disable = no 
        socket_type             = dgram 
        protocol                = udp 
        wait                    = yes 
        user                    = root 
        server                  = /usr/sbin/in.tftpd 
        server_args             = -s /srv/tftpboot 
        per_source              = 11 
        cps                     = 100 2 
        flags                   = IPv4 
} 

하지만 이미 설정이 잘 되어 있을 것이다.
ftp서버의 루트 디렉토리는 /srv/tftpboot 이므로 원격 부팅을 위한 파일을 여기에 카피하면 된다.

초기 프로젝트 관련 참여 개발자 알림

@kbu1564 @formfoxk @GangHoyong @kimhajin

4명이서 시작한 초기 프로젝트 : https://github.com/kbu1564/SecurityBootloader
시작 인원은 위 4명

이것이 D2 Campus FEST 당시 아이디어가 보강되는 과정에서 참여한 인원이
지금의 인원들

오늘 초기 팀원중 한명이 공개 소프트웨어 공모전에 발표하러 갔다가 참여인원이냐는 질문을 받았다는
글을 보고 초기 프로젝트와 그에 대한 참여인원을 알리는 글을 적을 필요가 있다는 생각에

해당 이슈를 등록함

gPXE를 지원하는 하드웨어

Realtek 8180/8185(rtl8180 driver; 8180는 802.11b, 8185는 802.11b/g)
802.11n을 지원하지 않는 모든 Atheros cards(ath5k driver)

iPXE를 이용한 WPA/WAP2-PSK 인증 관련 이슈

참고 : http://etherboot.org/wiki/wiki/qemupxe
https://wiki.tudos.org/QEmu

  1. cd ~
  2. mkdir pxe; cd pxe
  3. wget http://etherboot.org/gtest/gtest.gpxe
  4. wget http://etherboot.org/gtest/bz2bzImage
  5. wget http://etherboot.org/gtest/initrd.bz2
  6. gtest.gpxe를 다음과 같이 수정
#!gpxe
kernel tftp://10.0.0.88//bz2bzImage root=100
initrd tftp://10.0.0.88//initrd.bz2
boot

ps. 여기서 아이피를 이렇게 주었는데 나중에 실행할려면 dhcp에 해당 아이피가 등록되어야 하는 것 같다. 거기에 대해선 좀 더 찾은 후 수정하겠다.

  1. gpxe.dsk 파일을 다운로드 받자
    1. link : http://rom-o-matic.net/ 에 들어간다.
    2. 아래에 보면 gPXE Release 들이 보이고, 가장 최신의 (current-top) Release버전으로 들어간다
    3. 아무것도 건들지 말고 4번의 Get Image버튼을 눌러 다운로드 받는다.
  2. gpxe.dsk가 있는 경로로 이동한다.
  3. qemu를 실행한다.
    qemu-system-i386 -bootp tftp://10.0.0.88//gtest.gpxe -tftp /home/[yourName]/pxe/ -fda gpxe.dsk
  4. 실행되지 않는 것을 볼 수 있다.
    원인 : 추후 찾겠음.
  5. 실행되는 것을 보고 싶으면 다음과 같이 치면 된다.
    qemu-system-i386 -fda gpxe.dsk -net nic -net user -bootp http://etherboot.org/gtest/gtest.gpxe

중계서버에서 패킷 암호화

중계서버로 작동중인 서버(리눅스)와 클라이언트(GRUB, Android) 간에 보안을 위한 암호화를 목적으로 한다

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.