warning.or.kr

스크린샷 - 2015년 06월 19일 - 20시 45분 37초우연찮게많이 만나는 페이지인 www.warning.or.kr의 메커니즘을 분석해보고자 한다.
본 페이지에서는 적당한 타겟으로 4shared.com을 예로 들었다.
크롬으로 http://www.4shared.com 요청시
1

NC로 HTTP GET 메소드 결과
2바로 warning.or.kr로 리다이렉트 되는것을 볼 수 있었다.
보다시피 DNS의 질의로는 필터링하지 않았다.
3따라서 패킷이 본서버로 가는중  필터링당한후 302가 날라오는것을 추측할 수 있다.
어떤 기준으로 필터링 되는지 알아보기위해 서버에 직접 접속한후 HOST 값만 localhost로 바꿨을때의 결과는 아래와 같다.
4정상적으로 결과값을 가져오는것을 확인할 수 있다.
그럼 패킷이 라우팅되는동안 HOST 필드를 확인하면서 블랙리스트를 만나면 실제 서버와 연결대신에 302를 날린다는것을 짐작할 수 있다.
어느 라우터에서 필터링이 걸리는지 확인하기위해 traceroute 를 실행하였다.
5이를 바탕으로 국가 경계점을 기점으로 HOST 필터링 여부를 확인하려 했으나 실패 ㄱ-

naver.com 에 HOST: www.4shared.com 시전시
6네이버 반환
www.google.com 에 HOST: www.4shared.com 시전시
7워링 반환

결론
ISP단에서 해외로 나가는 패킷에대해서 HOST 부분에 Inspection을 하는것을 알 수 있다.

우회방법
가장 좋은 우회방법은 SSL 사용이다.
https를 지원하지 않는 서버에는 HOST : localhost 나 가상 호스트 설정이 되어있는 서버로는
HOST : http://hostname 을 사용하면 우회가 가능하다. (여기까지 필터링은 하지 않는것으로 보인다)

Chromebook Kernel upgrade

samsung-srs5_chrome-white-cover-lg

크롬북에 데비안 7 wheezy를 올려서 쓰다가 업데이트 하는바람에 패키지가 다 꼬였다 .. ㅠ
그래서 그냥 다 밀고 jessie로 올리려니 커널이 너무 old 하댄다 (기존 3.4.0)
전에 3.4.0도 직접 패키징한건데 작성한 자료가 없어서 멘땅에 헤딩하면서 작성하였다.  결론은 성공

1. 필요패키지 설치

apt-get install git-core  kernel-package

2. git checkout
git clone https://chromium.googlesource.com/chromiumos/third_party/kernel
cd kernel/
git checkout origin/chromeos-3.18

3. 설정
# First we patch “base.config“ to set “CONFIG_SECURITY_CHROMIUMOS“
# to “n“ …
cp ./chromeos/config/base.config ./chromeos/config/base.config.orig
sed -e \
‘s/CONFIG_SECURITY_CHROMIUMOS=y/CONFIG_SECURITY_CHROMIUMOS=n/’ \
./chromeos/config/base.config.orig > ./chromeos/config/base.config
./chromeos/scripts/prepareconfig chromeos-intel-pineview
yes “” | make oldconfig

4. 컴파일
make-kpkg kernel_image kernel_headers

5. 패키지 설치
dpkg -i /usr/src/linux-*.deb

6. 기존커널에서 커널 config 추출
vbutil_kernel –verify /dev/sda1 –verbose | tail -1 > ./config.txt
# Add “disablevmx=off“ to the command line, so that VMX is enabled (for VirtualBox & Co)
sed -e ‘s/$/ disablevmx=off/’ ./config.txt > /config-new.txt
순정 크롬 OS에(devchannel 45.0.2427)서 추출된건
console= loglevel=7 init=/sbin/init cros_secure oops=panic panic=-1 root=/dev/dm-0 rootwait ro dm_verity.error_behavior=3 dm_verity.max_bios=-1 dm_verity.dev_wait=1 dm=”1 vroot none ro 1,0 2506752 verity payload=PARTUUID=%U/PARTNROFF=1 hashtree=PARTUUID=%U/PARTNROFF=1 hashstart=2506752 alg=sha1 root_hexdigest=451ba0633d93141f977a5a71e92b2230ea6c4643 salt=e24daa025524c9239fc31a253100c2ac5cd9e095bf82f7d021e78763a14b81e0″ noinitrd vt.global_cursor_default=0 kern_guid=%U add_efi_memmap boot=local noresume noswap i915.modeset=1 tpm_tis.force=1 tpm_tis.interrupts=0 nmi_watchdog=panic,lapic iTCO_vendor_support.vendorsupport=3
인데 커널부팅 실패
어디선가 굴러먹던
quiet loglevel=0 console=tty2 init=/sbin/init add_efi_memmap boot=local noresume noswap i915.modeset=1 cros_secure tpm_tis.force=1 tpm_tis.interrupts=0 nmi_watchdog=panic,lapic disablevmx=off root=PARTUUID=%U/PARTNROFF=1 rootwait rw noinitrd vt.global_cursor_default=0 kern_guid=%U
이걸로는 부팅 성공, 분석은 귀찮아서..

7. 부트스텁 생성
git clone https://chromium.googlesource.com/chromiumos/third_party/bootstub
trampoline.S 파일의 /* Disable paging. */ 아래 세블럭 주석처리
make  하면 에러나는데 Makefile의 PREFIX 에서 /usr/bin/x86_64-pc-linux-gnu- 를 /usr/bin/x86_64-linux-gnu- 로 변경 후 ㄱㄱ

8. 커널 패킹
vbutil_kernel –pack ./newkernel –keyblock /usr/share/vboot/devkeys/kernel.keyblock \
–version 1 –signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
–config=./config-new.txt –vmlinuz /boot/vmlinuz-3.18.0 \
–arch x86_64 –bootloader ./bootstub.efi

9. 커널 덮어쓰기
dd if=./newkernel of=/dev/sda1

끝!

참고 : http://www.chromebook-linux.com/2011/11/compiling-your-custom-kernel-on.html
http://unix.stackexchange.com/questions/75565/i-need-a-step-by-step-guide-to-build-kernel-modules-in-chrubuntu

스크린샷 - 2015년 06월 16일 - 23시 19분 16초

Dell U2412M과 EDID

EDID(Extended display identification data)란 모니터랑 그래픽카드와 통신하는 데이터이다.
일반적으로 I²C를 사용하며 VGA나 DVI, HDMI 케이블을 통해서 128바이트(1.x버전)나 256바이트(2.0버전)의 데이터가 오가는데
http://en.wikipedia.org/wiki/Extended_display_identification_data#EDID_1.3_data_format 여기 잘 나와있다.

올초에 메인으로 쓰던 Dell U2412M를 사용하던중
[ 2.801934] [drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is 127
[ 2.801970] Raw EDID:
[ 2.801993] 7f ff ff ff ff ff ff 00 10 ac 7a a0 XX XX XX XX(SEREAL)
[ 2.802021] 1c 16 01 03 80 34 20 78 ea ee 95 a3 54 4c 99 26
[ 2.802049] 0f 50 54 a1 08 00 81 40 81 80 a9 40 b3 00 d1 c0
[ 2.802077] 01 01 01 01 01 01 28 3c 80 a0 70 b0 23 40 30 20
[ 2.802105] 36 00 06 44 21 00 00 1a 00 00 00 ff 00 47 48 4e
[ 2.802133] 33 52 32 37 42 33 45 35 4c 0a 00 00 00 fc 00 44
[ 2.802161] 45 4c 4c 20 55 32 34 31 32 4d 0a 20 00 00 00 fd
[ 2.802189] 00 32 3d 1e 53 11 00 0a 20 20 20 20 20 20 00 4a
이런 커널메시지가 날 반기며 모니터 출력이 정상적으로 되지 않았다.

위키를 보면 첫 8바이트는 “00 FF FF FF FF FF FF 00 ” 로 고정이나 커널은 첫바이트를 7F로 받으면서 에러를 내주었다.
물론 해상도데이터가 전혀없으므로 강제로 해상도를 잡아주기전까진 화면역시 나오지 않았다.
(편법으로 잘되는 모니터로 부팅후 바꿔치기 방법도 있었다.)

웹서핑을 하다가EDID를 PC에서 수정할 수 있는 방법을 찾았는데
PowerStrip을 이용하거나(추천) 리눅스 커맨드라인 프로그램이 있었는데(까먹음 -_-a)
내 피시에서는 지원되지 않았다.(HD3000….읽는거만…)

결국 귀찮아서 AS신청 하였다.(무려5년!)
1:1 교체였는데 불량화소 가득하고 빛샘현상이 가득해 보드만 냠냠 (1:1교체 ….)

어떤 이유로 EDID가 앞 1바이트만 바꼈는지도 모르겠으며 앞으로도 바뀔일이 없겠지…..
덕분에 EDID에 대해 공부할 수 있는 좋은 기회가 되었다. (이런기회는 없었으면….)

http://www.hardwarebook.info/VGA_(VESA_DDC)
http://en.wikipedia.org/wiki/Extended_display_identification_data
http://iambongsu.com/275

edid.tar.gz

LINUX 두개의 클립보드

최근 복사 붙여넣기를 하는도중 뭔가 자꾸 동기화가 안되는 느낌을 강하게 받았다.
이는 굉장히 거슬렸고 나를 짜증나게 만들었다.

이유를 찾았다.
역사상 이유로 리눅스에는 두개의 클립보드(selections)가 존재한다.

X11에서 사용하는 PRIMARY와 (Drag / Mouse mid button )
현대Gtk/Gnome or Qt/KDE에서 사용하는 CLIPBOARD (Control + c / Control + v)

두개가 아직 공존하는 이유는 CLIPBOARD-only 어플리케이션과 PRIMARY-only 어플리케이션의 공유가 어렵다는점.
(아직도 CLIPBOARD를 지원안해주는 어플리케이션이 있으면… 망한거아닌가;)

이 둘을 동기화, 관리 해주는 클립보드 매니저 툴들이 있다
Autocutsel, XFCE Clipmap, Gnome Glipper, KDE KlipperParcellite
(난 cliplt 쓰는데 parcellite랑 차이점을 모르겠음;)(은 Clipit is a fork of Parcellite라네)

이걸 써도 불편한건 사실 ( use primary에 synchronize 까지 걸면 그냥 드래그 하는데로 클립보드 들어가버림, 내가 원하는건 드래그는 클립보드 안넣었으면 좋겠는데..)

저질 같은 이런 현상을 확인하는 방법은
1. 웹페이지에서 한 단어를 Control+c로 복사한다(CLIPBOARD)
2. 다른내용까지 쭉 드래그만 한다.(PRIMARY)
3. terminator에 Shift + Insert 또는 마우스 휠을 누른다(PRIMARY)
4. terminator에 Ctrl+Shift+Insert 또는 Ctrl+Shift+v 를 한다(CLIPBOARD)

모든 문제를 해결하는방법은
Shift + Insert에 익숙한 습관을 Ctrl + Shift + Insert로 고치면 된다.(그냥 xmodmap으로 커스텀할까..)

http://unix.stackexchange.com/questions/77545/cut-copy-paste-in-linux-puppy-wary/77566#77566
http://unix.stackexchange.com/questions/82311/how-to-make-shiftinsert-paste-selection-after-closing-window-with-selection/82326#82326 (이글에서는 3개라고 주장함;)
http://en.wikipedia.org/wiki/X_Window_selection