2019. 8. 20. 20:36ㆍIT-개발/OS
경험한 내용 위주로 적어 놓습니다.
Service로 동작하는 (session : 0, intelgrity : System, User Name : NT AUTHORITY\SYSTEM) Program(A)이 있는데
UI 가 있는 (session : 2, intelgrity : Medium, User Name : NT AUTHORITY\유져) 인 Process(B) 를 생성한다.
(processtoken / CreateProcessAsUser 사용)
B가 동작한 결과를 A에게 알려줘야 한다. 별생각 없이 공유 메모리로 A가 만들고 B가 거기에 써주면 될거 같았다.
안된다. 그럼 B가 만들고 쓰고, A가 보기만 하면 되니까 하고 해보니, "Global\\" 이걸 Medium에서는 만들수가 없다.
공유 메모리는 말이다. 고민하다가
인터넷 검색, SecurityDescriptor를 활용한 방법이 있다고 해서 해봤다.
중간에 엄청나게 이름이 긴 함수도 있다는걸 알게됐다. 근데 내가 api를 잘못써서 일까~ 별짓해도 안된다.
함수 이름 : ConvertStringSecurityDescriptorToSecurityDescriptor
A가 공유 메모리 생성까지는 했는데, B가 "Global\\" 이렇게 이름지어진 공유메모리는 open을 못한다.
공유 메모리는 intelgrity가 System인 녀석이 만든걸 2단계나 아래인 Medium에서 기본적으로 사용할수 없다고 한다.
High는 가능하다는 내용을 본거 같은데~ medium 이어야만 하는 상황이라 이렇게 해결할 수는 없다.
반전, 아래글 참조하니 또 된단다~ 핵심은 'D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GRGW;;;IU)'
https://docs.microsoft.com/ko-kr/windows/win32/secauthz/sid-strings
https://docs.microsoft.com/ko-kr/windows/win32/secauthz/ace-strings?redirectedfrom=MSDN
B에서 파일에 내용 저장 / event 로 A에게 알려주는 방식으로 Test 해봤다. 된다. Event는 B의 intelgrity level이
medium 이어도 "Global\\" 로 이름지어진 event가 생성이 된다. A는 당연히 Open 할수 있다. 파일 열어서 내용
확인이 가능하다. 공유메모리만 이런 제약이 있는게 왤까? 커널객체들 다 test해보고 싶지만~ 시간이 부족하다.
지금까지 겪은 내용 이야기 하니 아는 분이 그런다. 그냥 B가 process exit code에 적당한 값을 써주고 A가 그걸
보면 안되냐고~ 아하, 그 옛날의 process exit code를 해보니~ 또 잘된다. 물론 단순한 수치값만 전달 가능하지만
이렇게 라도 값이 전달이 되는게 어디인가...
또, 어떤분은 그런다 파이프 사용하면 될꺼라고~
여기저기 뒤지다보니 System - High(관리자) 이렇게는 된다고 한다. process explorer 로 보니
integrity 가 AppContainer 라는 process 들도 보인다.
session : 0, User Name : Font Driver Host\UMFD-0 인 process들도 보인다. 배워야 겠다~ ㅜ_ㅜ
공부해서 정리되면 한번 올려야 할 듯~
'IT-개발 > OS' 카테고리의 다른 글
[windows] session, station, DeskTop - session 0 이슈 (2,sample) - (펌) (0) | 2019.08.28 |
---|---|
[windows] session, station, DeskTop - session 0 이슈 (1) - (펌) (0) | 2019.08.28 |
윈도우10 인증키 구매 - 라이센스 종류 (0) | 2019.02.15 |
TLS (Thread local storage) (펌) (0) | 2019.02.01 |
window10 권한 세부화 - BHO / IE 관련 (0) | 2017.01.18 |