Lenovo BIOS Setup by WMI

Lenovo의 2017년 이후 모델들은 WMI(Windows Management Instrumentation)를 이용한 BIOS 설정변경이 지원된다.
뭐 BIOS 직접 들어가서 수정해도 되지만 눈여겨볼건 거기 표시안되는 항목도 수정이 가능하다는점.
Lenovo에서 제공하는 매뉴얼과 샘플 스크립트 보면서 직접 해도 되지만 구글링좀 해보면 친절하게도 GUI형태의 도구를 제공하고 있다.

현재 사용하는 E585의 경우 2018년 이후 모델이기에 WMI가 지원되며 윈도우에서 ThinkBiosConfig.hta를 실행하여 간단하게 조작할 수 있다.

나의 목적은 내장그래픽에 할당된 메모리 크기를 늘리는 것이었는데…

항목이 있어 256->512MB로 변경후 재부팅 해보았으나 적용이 안된다….

해당 문제가 Lenovo Forum에 제기 되었으나… 담변이 없다.

참고링크 :
Get-WmiObject -list * -NameSpace root -Recurse -EA 0
cscript.exe %scriptroot%\Test\SetConfig.vbs SecureBoot Enable
https://www.mediasupport.org/wp-content/uploads/2017/05/skl_deploy_01.pdf
PowerShell script to Modify Lenovo BIOS settings.

Kingst LA1010 Logic Analyzer

로직분석용으로 저렴한 제품을 사용해서 그런지 저렴하다고 험하게 써서 그런지 7~8$제품 두개나 죽어버렸다. 또다시 저렴한 제품을 구매해서 땜빵할까 하다가 그래도 스펙이라도 확실히 나와있는 제품을 구매하자 싶어 Aliexpress를 돌아보던 중 저렴한 가격에 PWM 출력을 지원하는 제품을 찾았다.
이전에 뭐좀 테스트 해보려고 PWM시그널 만드려면 펌웨어 하나 만들어야 했는데 이게 있으면 좀 편하겠지 싶어서 구매했다.

제조사는 Kingst, 제품명은 LA1010
총 16채널에 100M samples @ 3ch, 16M samples @ 16ch 을 지원한다.
인아웃 전압번위도 -50~+50v에 Impeadance가 220KΩ으로 그냥저냥 쓸만하다.
PWM은 0.1~10Mhz까지 지원하며 3.3v 고정이다.
이전에 쓰던 제품은 saleae 소프트웨어를 사용했는데 Kingst는 전용소프트웨어를 사용해야 한다.
비슷한 인터페이스지만 중국산이라 뭔가 찝찝함이 있다.(나중에 시간나면 한번 까보자)

11월11일 광군절 할인받아 배송비포함 30$정도 줬는데 21일쯤 도착한것 같다.
패키징이 상당히 잘되어있었다. 뽁뽁이봉투 + 박스 + 뽁뽁이 +아래 내용물 케이블이 22AWG 실리콘재질로 만듬새가 좋다. 9핀이 연결되어있는게 3개, PWM용 2핀짜리가 2개 들어있었다.

전자제품은 까야 제맛

저렴이 제품이라지만 Spartan3 XC3S200 FPGA를 채용했다.

USB를 통해 통신하기위해 CY7C68013A를 사용했다.

롬이 있으면 괜히 덤프떠야될거같은거는 직업병인가…

idVendor=77a1, idProduct=01a2로 확인되었다. 혹시나 싶었는데 saleae 소프트웨어는 인식하지 못하였다.
PWM뿐만아니라 LA기능도 정상동작하는것을 확인하였다.
분석대상만 구매하면 될것같다.

samsung 970 evo 에 TCG OPAL로 HW Encryption 적용하기

보통 파일이나 드라이브를 암호화 하기위해서는 소프트웨어에서 암호화를 진행하거나 CPU의 힘을 빌려 암호화를 진행한다.
이경우 암복호화 작업에 CPU연산이 소모되며 키관리도 OS에서 하다보니 여러가지 문제점이 생긴다.
SED(self-encrypting drives)의 경우 디바이스 자체적으로 암복호화하여 스토리지에 저장하는 방식을 지원한다.
당연 CPU연산이 불필요한 만큼 속도와 보안적인 측면에서 이점이 있다.

최근 구매한 970 EVO는 Class 0, TCG OPAL, Encrypted Drive  세가지 하드웨어 암호 옵션을 제공한다.
Class 0은 BIOS의 지원하에 부팅과정에서 암호를 입력하면 드라이브가 잠기거나 풀린다.
TCG OPAL과 Encrypted Drive의 경우 부팅 이후 특정 명령어를 컨트롤러로 보내 드라이브를 잠그거나 해제할 수 있다.

가장 간단한건 BIOS에서 지원하는 Class 0 방법을 사용하는것이다.
하지만 최근 구매한 Lenovo E585의 경우 영문자 + 숫자 조합만 가능하며 특수문자는 지원하지 않는 문제가 있다.
패스워드에 특수문자가 들어가지 않는다면 패스워드 크랙에 소요되는 시간을 크게 줄일 수 있고 그만큼 보안에 취약해진다.
따라서 현재 BIOS 상태에서는 Class 0는 선호하는 방법이 될 수 없다.
Encrypted Drive는 윈도우를 사용하는경우 여기에서 활성화 방법을 다루고 있다. (Microsoft eDrive 와 같은건가?)
이글에서는 TCG OPAL을 사용하여 SED를 활성화 하는 방법을 설명하고자 한다.

TCG OPAL을 설정하기 이전 간단한 구조부터 알고가면 이해가 쉬워진다.
OPAL이 활성화 된 Drive는 다음과 같은 동작을 한다.
처음 전원 투입으로 PC가 부팅하면서 Drive를 액세스 하면 Drive는 지정된 이미지(PBA:Pre-boot authrization)를 보여준다.
PBA는 부팅 가능한 작은 리눅스 이미지 이며 부팅과 함께 패스워드를 입력받아 이 패스워드를 Drive로 전달하는 역할을 한다.
Drive에서는 입력된 패스워드가 일치하면 Drive를 Unlock하게되며 이때부터는 암호화된 데이터를 읽고 쓸 수 있게된다.
PBA가 보여지는동안 즉, 패스워드가 입력이 안된 경우(실패한경우) 다른 매체를 통해 부팅하게되면 이 드라이브는 사용할 수 없다.

PBA가 보여지는동안 리눅스에서 Gparted로 확인하면
이렇게 보이지만 unallocated 영역을 파티셔닝하게되면
이런 에러가 뜨게된다.
윈도우에서 해당영역에 접근하면 이렇게 뜨게된다.
한마디로 읽지도 쓰지도 못한다.

서론이 길었지만 본론으로 돌아가서 TCG OPAL을 활성화 하는 방법은 libata.allow_tpm를 활성화 하여 sedutil을 사용하는 방법과 부팅가능한 USB에 rescue system을 구워서 그걸로 부팅해서 sedutil을 사용하는 방법이 있다.
본인의 경우 현재 시스템에 아무런 OS가 없어 Bootable USB를 사용하여 진행하였다.

USB를 통해 부팅하는경우 다음과 같은 로그인 화면이 나타난다.
나타난대로 login id는 root이며 패스워드는 없다.
사용가능한 Drive를 확인하기 위해 “sedutil-cli –scan” 명령을 입력하면 다음과 같은 결과가 나타난다.
이때 /dev/nvme0 뒤에 나타나는 숫자 2는 TCG OPAL 2.0을 지원한다는 의미이다.
이후 명령부터는 Drive를 초기화 할 수 있으니 데이터는 반드시 백업하여야 한다.
“linuxpba”명령은 앞서 말한 패스워드를 입력받아 Drive를 활성화 하는 명령이다.
패스워드로 “debug”를 입력하면 현재 설정만 보여주고 재부팅 하지 않는다.(다른거 입력하면 재부팅한다;)
현재는 설정이 아무것도 되어있지 않다.
“linuxpba” 명령을 통해 Drive가 보이며 해당 드라이브가 “is OPAL NOT LOCKED” 상태이면 잠글 수 있는 상태이다.
(본인의경우 linuxpba명령을 썼을때 디버그 메시지가 출력되어  less 나 more 명령어로 stdout만 따로 보았다)
예제에서 패스워드는 debug로 설정한 뒤 마지막 단계에서 원하는 패스워드로 바꾸게 된다.
진짜 이후 명령어부터는 기존 데이터가 어떻게 될지 모르니까 반드시 백업하고 진행하여야 한다.
Drive 잠금을 설정하기 위해 다음의 명령어를 입력한다.
sedutil-cli –initialsetup debug /dev/nvme0 # 초기화
sedutil-cli –enablelockingrange 0 debug /dev/nvme0 # 락0활성화
sedutil-cli –setlockingrange 0 lk debug /dev/nvme0 # 락0 크기 설정
sedutil-cli –setmbrdone off debug /dev/nvme0 # MBR done 설정, pba image 설정하기위한 명령어인듯
gunzip /usr/sedutil/UEFI64-n.nn.img.gz # 압축해제
sedutil-cli –loadpbaimage debug /usr/sedutil/UEFI64-n.nn.img /dev/nvme0 #pba image설정
n.nn은 해당하는 rescue 이미지의 버전마다 달라진다. 본인의 경우 UEFI64-1.5.1.img를 사용하였다.
순서대로 차례대로 입력하면 다음과 같은 결과가 나타난다.
여기까지 했다면 “linuxpba” 명령을 내리면 대상 Drive는 “is OPAL Unlocked” 상태로 표시되게 된다.
“not locked”와 “unlocked” 모두 한글로 보면 잠겨있지 않음이지만, not locked의 경우 잠금이 설정이 되지않은 상태, unlocked는 잠금이 설정되었지만 풀려있는 상태로 “is OPAL Unlocked” 상태가 되면 잠금이 설정되어 있는상태이다.
설정된 패스워드는 debug 이며 패스워드 변경을 위해 다음의 명령어를 입력한다. 이때 yourrealpassword의 경우 실제 적용될 패스워드로 변경하면 된다. (쉘에 직접 입력하는 방식이다보니 백슬러시를 통한 문자열 이스케이프가 필요하다)
sedutil-cli –setsidpassword debug yourrealpassword /dev/nvme0
sedutil-cli –setadmin1pwd debug yourrealpassword /dev/nvme0
패스워드 변경명령은 아무것도 출력되지 않는다. (성공메시지 조차도….)
패스워드 변경이 정상적으로 되었는지 확인하기위해 다음의 명령어를 실행하면
sedutil-cli –setmbrdone on yourrealpassword /dev/nvme0
변경된 패스워드가 맞을경우 MBRDone set on 이라고 뜨게 된다. (틀릴경우 method status code NOT_AUTHORIZED)
확인까지 끝났으면  전원을 “완전히” 껐다가 설정된 Drive로 부팅하게되면  PBA가 뜨게 된다.
설정한 패스워드를 정확히 입력하면 “is OPAL Unlocked” 가 뜨며 자동적으로 재부팅하게된다 (여기서도 debug를 입력하면 쉘로 빠지며 sedutil을 사용할 수 있다)
재부팅할때 BIOS에서 다른 부팅매체를 선택해 Windows 나 Linux 등의 OS를 설치할 수 있다.
아래는 샘숭의 매지션 소프트웨어에서 확인결과.

TCG OPAL 단점
부팅을 두번한다. (느리다 빠른부팅이 되지않는다.)
설정이 생각보다 간단하지 않다.(Class 0만큼 쉽지않아..)
절전모드(S3)에 들어가면 깨어나질 못한다. (드라이브 전원차단 = 인증해제, 다시 인증할 방법이 커널에 구현되어 있지 않음 sedutil에 –prepareForS3Sleep 과 같은 명령어를 쓰면 된다고하나 난 아직 잘안됨… 해결방법 아시면 피드백 부탁드립니다)
설정은 했는데 오버프로비저닝이 잘 적용 되는지 모르겠다.

ps. 패스워드 까먹으면 어떻게해야할지 모른다. (초기화로 되려나? 서비스센터 가져가야되나? 이미 OS 설치해버려서 테스트하기 귀찮…)
몇일전 Self-encrypting deception: weaknesses in the encryption of solid state drives (SSDs)  이런 논문이 나왔다.
라고한다.

참고문헌
https://wiki.archlinux.org/index.php/Self-Encrypting_Drives
https://github.com/Drive-Trust-Alliance/sedutil/wiki/Encrypting-your-drive

 

 

++++ 20181206 +++ 추가 +++

디스크 매니저에서는 잘 보이나

매지션 소프트웨어에서는 안보임…
시간날때 삼성에 문의해봐야지

노트북 구매 Lenovo ThinkPad E585

여태 사용하고(이 리뷰 작성에도 사용하는) 사용했던 노트북은 2015년 10월인가 11월인가 구매한 HP ENVY 13 제품이다.
스카이레이크 i5에 8G ram, 3200×1800해상도의 IPS 액정(글레어는 함정), 256G의 M.2 SATA SSD, 1.27kg
출시와 동시에 예약구매하여 액정 빛샘이 너무 심해 직접 총판가서 3대 열어서 양품으로 받아온 노트북이 언제부터인가 부족한점이 조금씩 눈에 밟히며 여유되면 새로 장만해야지 벼르다 최근에 ThinkPad E585를 구매하였다.

지금에서야 쓰는 ENVY 13 최대 단점은
HDMI 4K60Hz 미지원 (4K30Hz까지만..)
M.2 NVME 미지원
확장불가능한 Onboard DDR3 정도가 있다.
사무용도로 쓰기에는 아직도 부족함이 없으나 VM 한개도 버거운 램과 낮은 IOPS의 SSD로 인해 로드가 발생하면  급격히 느려지며 팬이 엄청난 속도로 돌아간다.
램은 온보드라 교체를 못하니 SSD만이라도 바꿔볼려 했더니 NVME는 미지원에 거기에 4K 30Hz에서 느껴지는 인풋렉이 점차 사용시간을 줄여 나갔고 3년가량의 정을 뚝 떨어지게 만들기에 충분하였다.

단점만 쓰면 부정적으로 보여질 수 있으니 장점으로는
가벼운 무게, 반올림하여 1.3kg대와 무식한 크기의 어댑터는 집에서 쓰고 외출용으로는 그램 어댑터를 개조해서 가지고 다녔는데 전공책 한권보다 가벼운 느낌으로 휴대가능.
인터넷 사용으로는 팬따위는 돌지않는다. (리퀴드 프로 덕일까?..)
3200×1800의 IPS액정은 반사패널이라 조금 아쉬움이 있지만 너무 높은 해상도로 인해 2880×1620 정도로 조정해서 사용하였다.
키감, 터치패드도 나름 우수하여 여러모로 나를 만족시켜주었다.
3년간 사용한 노트북이 동영상 재생 4시간을 버티고 대기모드로 들어가는건 관리를 잘해서인지… 좋은 노트북이어서 그런건지는 모르겠다.

ENVY는 이쯤 ENVY 하고 이번에 구매한 E585는
AMD의 라이젠 2500U를 사용하며 DDR4 램슬롯은 두개!
15.6인치이나 해상도는 FHD로 ENVY보다 많이 안좋아졌다. 실제 사용에 있어서도 시야각이 협소하다. TN처럼 반전되지 않으나 명암비가 뚜렷하게 나빠진다.
2.1kg 로 외장그래픽이 빠진 모델 치고는 좀 무겁다. 대신 어댑터가 ENVY의 그것보다 작으며 가볍다.  묵직해진 만큼 튼튼해진 느낌이다.
USB-C로 충전가능하여 차후에 USB-C PD 어댑터를 구매한다면 더 편리할 것 같다.

커다란 픽셀에 불량화소라도 있으면 어쩌나 걱정을 했는데 액정은 양품이다. 시야각이 그리 좋은편은 아닌데 상품설명보면 178도 화각이란다… 서양 형님들이 BOE 패널임을 EDID값으로 확인한듯 하다.
리눅스 부팅문제가 있는데 독일형님께서 해결책을 찾고 레노버에 리포팅하였으나 아직 패치는 없는것으로 보인다.
간단하게 리눅스 부팅할때 검정화면에서 멈춘다면 kernel boot arg에

ivrs_ioapic[32]=00:14.0 ivrs_ioapic[33]=00:00.1 spec_store_bypass_disable=seccomp

를 추가하면 부팅이 잘 된다는것.
블프에 NVME SSD를 구매하고 거기에 사용환경을 세팅할 예정이기에 기존의 128 SSD에는 윈도우를 설치하여 이것저것 테스트 해보고 라이브 USB로 리눅스 부팅을 테스트 해보았으나 역시 검정화면이 지속되어 위의 argments를 추가하였더니 마법처럼 부팅이 되었다.  블루투스가 불안정하다는 이슈가 있었지만 나는 거기에 스피커 소리가 나지않는 문제까지 발생하였다. 뭐 이런건 차차 해결해 나가도록 하고… 아니 누가 해결좀 해줬으면 하고….

뭔가를 사면 뜯고 보는것은 박스만이 아니다.
정상부팅만 확인하고 뒷판을 열어 내용물을 확인하였다. (외관은 보드나라에서 자세히 다뤄준다)

성질이 급해서 팬까지 다 떼고 떢찌떢찌 발려있던 서멀 닦아내고 한컷. (진짜 서멀 아낌없이 떡칠되어 있었다)

굴러다니던 리퀴드 프로를 얹고 한컷. (캐패시터로 보이는 부품이 많아서 캡톤테잎으로 둘렀다.)

싸구려 SSD도 한컷 TS128GMTE110S 라는데

이런 이상한 속도가 나온다. 다른 리뷰들 보면 쓰기속도도 1000대가 넘었던거같은데….

서멀도 다시 발라줬으니 내장그래픽의 파스를 돌려보았다. (8g x 2 듀얼채널)

서멀 재도포전 점수는…..  안타깝게도 측정하지 못했다;
보통 2500u의 경우 2000~2200대를 기록하고 인텔의 8250u가 900점 정도 나오는것 같다.

무엇보다 궁금했던것이 HDMI가 4K60Hz(HDMI2.0)를 지원할 것인가 하는 문제였다.
구글링을 통해 얻은 Spec sheet에는 Max resolution이 FHD 60Hz로 표기되어 있어서 4k가 지원되지 않으면 어떻하나 싶으면서도 레노버 포럼에는 E585로 4K50Hz가 지원되는 스크린샷을 올라와 있었다. 또한 노트포럼에서 USB-C를 통해 DP 출력을 지원한다고 하여 반신반의하며 구매하였다.
결론은 내장된 HDMI는 4K60Hz를 지원한다. 크로스오버 2714ud를 이용하여 4K60Hz가 지원되는것을 확인하였고 나중에 여력이 된다면 USB-C를 통해 4K60Hz가 지원되는지 확인예정이다.

잠깐 사용하며 느낀 E585의 장단점은
램슬롯 두개, 2.5 inch + NVME, 4K60Hz, 키감, 디자인, USB-C, 180도 힌지 등이 장점이고
인터넷만해도 돌아가는 팬소음, 하판 나사는 알루미늄 포일을 구겨서 만들었을거야, 2.5inch sata를 쓰기위해서는 20$가량의 케이블을 별도구매해야함, 리눅스 지원이 미흡한 점, 싸구려 액정패널, 저렴이 터치패드 등은 단점이 되지만 이를 모두 용서하는 가격.

무게는 다소 늘어났지만 저렴한 가격에 원하는 성능을 모두 충족시키는 제품을 구매한것 같다.
앞으로 몇년동알 쓰게될진 모르겠지만 E585로 재미있는것들을 많이 할 수 있었으면 좋겠다.

ps. 4K60Hz와 PD를 동시 지원하는 USB-C 어댑터, 도크
https://www.aliexpress.com/item/Original-Xiaomi-Type-C-USB-C-to-Mini-DisplayPort-Multi-function-Adapter-4K-HD-Smart-Charge/32950081605.html
http://prod.danawa.com/info/?pcode=6000346
샤오미는 mini-displayport라서 별도 케이블 필요한데 다른기능들이 너무좋다…

++++ 2018-11-26 추가 ++++

2.5inch 외장슬롯에 sata케이블이 존재하지 않는다.
판매자측에 문의결과 SSD모델은 하드 빼면서 sata케이블과 가이드를 같이 제거하로 SSD를 장착한다고 한다.
별도 구매는 1만 5천원이며 택배비 2500원, 배송은 하루만에 해주었다.

전화로는 새제품 보내줄것처럼 이야기했는데…. 그냥 기존 노트북에서 빼낸제품이다.
작동은 잘 되며 약간의 무게가 증가하였다.

+ 사용기 추가
액정이 저질이다. 1~2분만 밝은화면 띄워놓으면 잔상이 생긴다.(없어지긴 한데 거슬린다)
thinkfan설치하여 FAN 속도 제어하니 계속 돌던팬이 웹서핑 기준으로 5분에 한번씩 10초정도 돈다.
노트북쿨러를 이용하면 조용하게 사용가능할것 같다.

970 evo 500GB로 NVME SSD를 교체하였다. 정상작동.

배터리는 일반적인 웹서핑시 80%밝기에서 1시간에 40%가 빠진다. 2시간이라고 보면 될듯, USB-C PD를 사용하니 충전은 꽤나 자유로울듯.

++ 패널 정보

패널이LP156WF9-SPK3 로 나온다.. LG 제품이다..

공유기 루트쉘 획득하기

인터넷 설치하면서 생긴 공유기(DVW-2300N)를 사용하면서 문득 루트쉘을 열어보고 싶어졌다.

보통 같으면 뚜껑따서 UART 연결하거나 롬떠서 작업을 했겠지만 잠깐 살펴보면서 자동업데이트 기능이 존재하는것을 확인하였다.
브릿지로 연결해봤더니 “http://180.182.38.50:8080/tms/servlet/getApProvInfo?macAddr=18c50122XXXX&downType=1&ver=F1.0&cfgac=6767&cfver=Davolink_DVW-2300N_1.36.50CJ_CFG&fwac=7539&fwver=Davolink_DVW-2300N_1.40.50CJ&model=DVW-2300N&vendor=Davolink&cferr=0&fwerr=0”
요청을 확인할 수 있었고 456bytes 의 바이너리 파일을 획득하였다.
대충 봤을때 암호화 or 인코딩이 되어 식별이 불가능했으나 downType의 인자를 1이 아닌 0으로 주었더니 아래의 텍스트를 확보할 수 있었다.

설정파일과 펌웨어 파일의 주소를 확보할 수 있었고 펌웨어의 경우 realtek 표준펌웨어로 보여졌다.
설정파일에는

이런 내용이 담겨있었고 Web접근에 사용가능하였다. (유저비밀번호 백날 바꿔봐야 이런 백도어있으면 무의미하다)
cjroot로 접근하였더니 네트워크/인터넷설정 탭에서 Telnet 활성화메뉴가 나타났으며 활성화를 시켜도 텔넷접속은 되지 않았다.


펌웨어를 분석해보니 web shell이 존재하여 이를 이용하여 몇가지 작업을 해볼 수 있었다. (*아래 URL접근은 cjadmin으로도 가능하였다)

기존의 데몬을 죽이고 포트와 쉘을 다시 지정하니 텔넷접근이 가능하였다.

아이디와 패스워드를 확보하기위해 열심히 펌웨어를 분석했으나 간단하게도 답은 cjroot에 CJHV_VoIP_0601 였다.
(인터넷이 연결되지 않으면 “**********” 을 아이디와 패스워드로 사용하는것으로 보인다)
쉘 확보하고 간단한 정보를 띄워 보았다.

뭔가 하기에는 리소스가 너무 열악하다…
심지어 chmod도 없어서 cp신공으로 바이너리 몇개 실행시켜보고 끝냈다.

잠깐 분석? 하면서 miniupnpd가 외부포트로 개방되어 있는것을 확인하였다.
TCP 포트는 부팅시에 랜덤하게 결정되는것으로 보이며 UDP는 1900고정개방인듯 하다.

정상적인 사용을 위해 upnp와 자동업데이트는 사용하지 않는것으로 설정하였다.

 

근데 이걸 내가 왜 분석한거지…?