devpia logo

DevTalk

드라이버 개발 질문(실시간 파일 암복호화)

배바지 / 2018-02-20 오후 8:45:23 / 조회수(4101)

윈도우즈 커널 실시간 암복호화를 개발중인 (23)신입개발자입니다. 
 
1.Client 요구사항
 
암호화, 복호화가 실시간으로 되어야 하며, 원격지에서 FTP또는 웹으로 파일을 끌어당길시 복호화가 되어야함...  (원격지 복호화 요구사항은 중간에 알게되었습니다. 의사소통이 잘안되서...)
 
2.과거 진행했던것들과, 현재 진행과정
 
어제부터 시작했는데 3월말까지 드라이버 인증까지 끝내는 것으로 회사는 스케줄을 잡고있습니다. 아 물론 말도안되게 짧은 시간이라는 건 알고 있습니다만 해야한다고 합니다.(참고로 혼자 개발합니다.)(11월 중순 부터 시작하긴 했는데 하던 프로젝트를 버리고 드라이버로 방향을 다시잡은것입니다. 암호화는 되는데 복호화는 원격지에서 끌어당길시 복호화되는 요구사항을 맞출려면 드라이버밖에 답이 없는 것 같아서요)(결과물이 아무것도 나오지 못했습니다... 상황이 좋지않네요....)
 
팀 내부적으로 드라이버로 개발하는 걸로 결론이 났고, 드라이버도 처음해 봅니다.
 
일단 어떻게든 해보려고는 하는데 드라이버 강좌(이봉석)나 책(윈도우 디바이스 드라이버, 이봉석 저)을 보고 있습니다. 
 
 
 
접근 원리 설명 부탁좀 드리겠습니다.
 
세미나나 다른 것도 추천해주셨으면 합니다.
 
이 글을 보신 윈도우 드라이버 개발자분들이 있으시다면 소규모 세미나라도 열어주시면 감사드리겠습니다.
 
근처에 아는 윈도우 드라이버 개발자분들이라도 있다면 멀리 퍼뜨려주셨으면합니다. ㅠㅠㅠㅠ
 
 
 
요약
 
1.실시간 암복호화 개발 어플리케이션 API Hooking방식과, ReadDirectoryChangesw함수를 사용해보고, 두가지 방식으로 프로젝트 진행
 
2.Client 요구사항과 맞지 않아서 기존 프로젝트 폐기 => 드라이버로 방향전환
 
3.기간이 1달 하고 10일이 남았는데 누구든 도와주셨으면 합니다. 

배너

댓글보기

야근제로 / 2018-02-20 21:29

마감때까지 최선을 다하되.. 내용으로 봐서는.. 장렬히 전사하셔야 될 듯 합니다..

JUNE_MS / 2018-02-20 23:38

ㅎㅎㅎ장렬히 전사.

분당에집갖고싶어 / 2018-02-21 09:02

ㅠㅠ 장렬히 전사...

yadnus / 2018-02-21 09:42

ㅈㅈ 퇴사각인듯

엘리트해커 / 2018-02-21 10:52

음...안됩니다. 신입에게 드라이버 개발을 맡기다뇨...회사의 실책인듯. 님이 드라이버 개발에 빠삭하신다면 얘기가 달라지겠으나 내용으로 봐서는 전혀 아닌 것 같은데 맞나요?? 지원 대상 OS가 어떻게 되는지 모르겠으나 XP는 버리더라도 Vista, 7, 8, 10 그리고 x86, x64까지 들어간다면 얘기가 달라집니다. 각각의 OS 지원하고 테스트하는 것도 시간이 걸릴텐데... 내용을 봐서는 미니필터 드라이버를 개발해야 할 듯 보이는데 MS로부터 altitude는 할당 받으신건지 궁금하네요? 이것도 시간이 걸릴텐데. 개발 후에 whql 인증까지 받으려면 시간이 더 걸리고요. 안정화 테스트만 해도 적게는 2주는 해야 할 듯 한데 시간이 걸리죠? 그리고 verisign 인증서는 가지고 계신건가요? 이것도 발급에 시간 걸리는 것 아시죠? 한달하고도 10일이면 절대 못하구요 외부에서 전문가 영입해서 개발해야 합니다. 왠지 장렬히 전사하실 것 같아요. 힘내세요.

쌈바라바라 / 2018-02-21 11:53

제가 견문이 짧아서 그런데 웹 또는 FTP 서버에 파일 올릴 때 복호화가 진행되어야 하면 서버에서 처리해도 되지 않나요? 왜 윈도우 드라이버를 만들어야 하는건가요. 송신할 때 복호화 후, 서버로 전송하는 건지.. 아니면 서버에 파일을 전달하고 서버에서 복호화를 진행하는 건지..

내가저쏘 / 2018-02-21 12:39

팀 내부적으로 드라이버로 개발하는 걸로 결론이 났고 팀 내부적으로 드라이버로 개발하는 걸로 결론이 났고 팀 내부적으로 드라이버로 개발하는 걸로 결론이 났고 팀 내부적으로 드라이버로 개발하는 걸로 결론이 났고 ,.. 팀장은 뭐하는 분입니까????? 희안하네...

의미없다 / 2018-02-21 14:08

커널??? 실시간??? 암복호화??? 신입 !!!! 제대로 포기각인듯...

소닉99 / 2018-02-21 14:20

회사 상황을 보니, 고생만하고, 일못한다고 욕먹을듯...ㅠㅠ

배바지 / 2018-02-21 14:31

쌈바라바라님 FTP서버에서 암호화가 진행되고 FTP서버에서 Client가 끌어당길때 (허가된 사용자에 한에서) 이때 복호화가 되어야 한다는 이야기입니다. 초간단하게 생각하면 FTP서버에서 파일이 Write될때 암호화되고, 파일이 Read될때 복호화 되야 한다는 얘기입니다.(FTP한정으로) 고로 복호화 과정은 서버 => 클라이언트 로 진행되므로 클라이언트에서 처리를 할수가 없기때문에 이렇게 처리를 진행하는 것입니다. 엘리트해커 일단, 커널영역은 처음이고 응용프로그램 개발자입니다, OS는 현재는 서버 2008로 한정하고 있고여. 사실 크로스사이닝으로 인증 진행하려고 하고, 인증 절차도 자세한건 알지 못합니다.(전문 드라이버 개발업체가 아니라) x86,x64둘다 지원가능해야 합니다. 다들 안된다고 하시니 마감때까지 최선을 다하는 걸로 결론내야하겠네요. 많은 답변 감사합니다.

알려줌메 / 2018-02-21 15:24

ㅠㅠ

메일전송안됨 / 2018-02-21 17:27

한마디로 FTP로 연결할 수 있는 파일서버를 하나 두고 그 서버에는 모든 파일을 암호화 된 상태로 보관하고 싶다. 그러나 허용된 사용자가 다운로드 받을때는 바로 복호화 되어서 사용자는 암호화되지 않은 파일을 바로 열어보게 하고싶다 라는거죠? 여기서 그 클라이언트는 님 회사가 개발한 특정 클라이언트겠죠? 현존하는 모든 FTP툴을 말하는게 아니라요... 그러면 드라이버까지 갈 이유 없습니다.

배바지 / 2018-02-21 22:08

메일전송안됨님 어떤 방식으로 할수있다는것인지 설명좀 부탁드려도될까요? 잘이해가안되서요 특정 디렉토리를 지정하면 그 디렉토리는 그때부터 들어오는 파일은전부 암호화해야하고 나가는파일(읽히는파일)(웹서버라면 웹에서다운로드 받는파일들 ftp서버라면 ftp클라이언트가 다운로드하는파일들)이 바로 복호화가되어야합니다 참고로 그쪽 업무단의수정은 없어야합니다 이걸 커널이아닌다른방식으로 구현할수가있나요?

아이뽕 / 2018-02-22 09:08

FTP로만 사용하시는거라면, 커스텀 FTP 서버를 만드시는게 편하실건데요... Put 할때 암호화 하고, Get 할때 복호화하면... 그런데 공유 폴더 개념으로 마구잡이로 카피 해서 넣는 방식이라면 일단 드라이버뿐이 없어 보이긴 하네요. 드라이버라면, 미니필터입니다. 인증서는 개발기간동안 받으시면 되고, altitude값은... 사내에서만 사용하시면 그냥 대충 정의하셔도 되요. 그런데 실제 문제는... 드라이버 경험이 없는... 그것도 신입한테, 드라이버 개발을 책임지라고 한거네요. 저도 필터드라이버만 몇년 했는데도 할때마다 실수하는데, 한달 하고 열흘이면, 그냥 못한다고 하세요. 완벽하진 않아도 큰 문제 없으려면 기본 만들어도 테스트만 한달이상입니다. 큰 문제 아니라는건 암호화가 잘 안된다던가... 복호화가 잘 안된다거나... 그 정도이지... 그 외에는 BSOD 입니다.

메일전송안됨 / 2018-02-22 10:52

처리레벨을 결정하려면 님이 이야기하는 작업내용이 중요한게 아니고 작업을 하는 주체가 뭔지가 더 중요합니다. 내가 건드릴 수 있는 부분이 많을수록 하이레벨에서 처리가능하고 내가 간섭할 수 있는 부분이 없을수록 로우레벨로 내려갑니다. 앞서 말했듯이 그 주체들이 님회사에서 만든 서버와 클라이언트 들이면 그냥 내부에서 소스수정하면 됩니다. 그게 아니고 내가 소스를 터치할 수 없는 다른 프로세스들의 작업에 간섭하고 싶은거라면 해당 디렉토리나 노드에서 방화벽이든 권한이든 다 막아버리고 파일 읽기등의 요청은 님이 만든 API를 통해서만 요청가능하게 하던가 (대개의 EAI방식) OS레벨에서의 일반적인 요청들을 후킹하던가 해야죠.(대개의 DRM방식) 지금 스케쥴상 선택할 수 있는 방법은 API 후킹밖에 없겠네요. 다른 프로세스 작업에 간섭하는 가장 쉬운 방법이니까. 그리고 뚫기도 가장 쉬운 방법이고 ㅋㅋ

배바지 / 2018-02-22 11:08

메일전송안됨님 제가 글을 잘못쓴건가 보네요 ... 잘못이해하고 계신것 같아요. 서버가 제회사에 있는게 아닙니다. 서버는 저희 회사에 암호화를 요청한 회사(Client(고객사) 라고 칭한것뿐입니다.) 그리고 고객사의 서버에서 Client들(실제 유저들)이 파일을 가져갈때 복호화가 되야하는 것입니다. 그 고객사의 서버에는 소스수정이 없어야 하고요. API같은 방식으로 직접 고객사에서 소스 수정이 들어가면 안되는 제약조건이 들어갑니다. API후킹도 이미 해본 방식이고요(이방식도 커널Layer로 들어가지 않는이상 Application단에서는 모든작업을 처리할수가 없다고 생각됩니다.(실력이 미천해서 확신할수는 없지만...))

메일전송안됨 / 2018-02-22 12:33

서버 - 클라이언트가 나왔을 때 서버(암호화를 요청한 고객사) - 클라이언트 (실제 유저들) 이라고 이해하는 사람이 얼마나 될지는 모르겠지만 .. 그거와 별개로 제가 님상황을 정확히 알 수 없기때문에 이러면 이렇게 저러면 저렇게 다르면 다르게 상황에 따라 일반적인 예시를 든겁니다. 상황에 맞게 선택하시라고 제가 앞서 말한 "여기서 그 클라이언트는 님 회사가 개발한 특정 클라이언트겠죠? 현존하는 모든 FTP툴을 말하는게 아니라요... 그러면 드라이버까지 갈 이유 없습니다." 이 말뜻은 파일을 받는 쪽의 프로그램이 님이 손댈수 없는 프로그램이라면 드라이버까지 갈 이유가 있다는 뜻이기도 하죠. 그리고 API 후킹을 Application단에서는 처리할 수 없다는 이야기는 왜 나오는지 이해가 잘 안가는데... 마치 제가 "API후킹을 사용하면 Application단에서 처리가능합니다"라고 말한것 처럼요. 위에서 언급했듯이 API후킹자체가 Application레벨이 아니라 OS레벨이에요.

ARMSharp / 2018-02-22 14:11

제가 비슷한 상황을 겪어본 적 있습니다. 솔직히 디바이스 드라이버... 이거 os를 비롯해 기본 지식이랑 경험 없으면 못해요. 제 경우엔, 팀장님이 도저히 안 되겠다 싶어서 3일인가? 시간 보내고 외주 맡겼습니다.

밍스크 / 2018-02-23 09:45

우리나라엔 드라이버를 개발할수 있는 능력을 가진 개발자는 없다고 보심되요.. 우리나라 개발자들은 그냥 외국의 우수한 개발자들이 만든 코드 copy&paste 하는 수준이죠 뭐

SkyNET / 2018-02-24 23:36

WDM WDF 이런거 하다가 토나오는 줄...

강한퓨전 / 2018-02-25 22:08

얼마전에 윈도우 인증 받았는데 한달 걸리네요 ㅎ. 윈도우 인증만요 소스 하나도 안고치고 ㅎ

travel / 2018-02-26 09:12

어려운 문제네요. 내부 인력으로 어떻게든 처리할 부분이 아닌 거 같아요

JUNE_MS / 2018-02-26 09:16

전사 ㅜㅜㅜ,,,

봉사청년 / 2018-02-27 10:10

지금이라도 위에 상황을 보고하세요. 배바지 님을 무시하는게 아니라 드라이버 경험이 없는 신입이 40일만에 할수 있는 사이즈가 아닙니다. 지금 보고하지 않으시면 납기일에 독박 쓰실 수 있습니다.

공무도하 / 2018-02-27 14:59

아..발암.... 팀장이 개아들래미네...

breakerA / 2018-02-28 10:02

네트워크 필터 드라이버로 처리해 보세요. 윈도 64비트는 커널 보호모드로 작동하므로 시스템 함수(ssdt)를 후킹하는 순간 수초 후 bsod 시전. 기한 내에 못 끝내더라도 도전해 보세요. 커널 개발은 어디가서든 좋은 스펙으로 남아요.

ARMSharp / 2018-03-02 09:27

아니 근데 저런 고난이도를 스물세살 신입한테 맡김? 말이 됨?

breakerA / 2018-03-02 13:04

링 제로(커널)가 아니더라도 유저레벨에서 가능해보이기는 해요. 시중에 보안프로그램도 다음 설명하는 방식을으로 많이들 만들더라구요. 어차피 커널이든 아니든 어플리케이션을 한번은 실행해서 파일 암,복호화 작업을 진행해야 하자나요. 전역 후킹 방식은 시스템 리소스를 많이 갉아 먹을 것 같고요. 그래서 비추. 유저레벨에서 타켓 ftp 프로그램에 코드인젝션을 하여 file read 관련 WINAPI를 후킹하면 좋을듯 하네요. 코드 인젝션과 이젝션을 하는 방법은 구글링 해보면 나옵니다. FTP프로그램의 파일 읽기, 쓰기 API를 조사해봐야 하는데요. Process Monitor 같은 프로그램을 이용해서 봐도 되구요. windbg 나 ollydbg 같은 디버킹 튤은 사용하여 FTP프로그램을 디버깅하여 파일 읽기, 쓰기 관련 WINAPI에 전부다 브레이크 포인트를 걸고 어떤 API가 걸려 드는지 각각 FTP프로그램을 조사해봅니다. FTP프로그램이 32,64비트냐에 따라 API 후킹 방식이 다릅니다. CPU OP 코드중에 점프코드가 있습니다. 이 점프코드를 사용하여 인젝션 된 DLL의 함수로 WINAPI를 점프시키고 처리 후 원 함수로 다시 점프하면 됩니다. 32,64비트 후킹 코드는 구글링 해보면 많이 납옵니다. 바이두에서도 많이 나옵니다. 사실, 신입이 하기에는 부담쓰러운 프로젝트 입니다만, 회사 인력중에 코치라도 해주는 분이 있다면, 맨땅에 해딩 해보세요. "처음 부터 잘하는 사람은 없습니다." 제가 늘 아끼는 사람한테만 하는 말이죠. 구더기 무서워 장 못 담그면, 평생 고만고만한 할꺼에요. 심해봤짜 짤리기 밖에 더하겠어요. 그것도 젊은 나이에. 내가 잘못했을때 회사가 대신 책임져 준다면 회사를 이용해보세요. 이곳이 아니더라도 언젠가는 님의 실력에 값어치를 쳐줄겁니다.

달빛에취하다 / 2018-03-06 16:47

1. 인증된 사용자 -> FTP에서 계정 관리로 충분할것 같고. 사용자별 접근권한이 들어가간다면 FTP로 사용은 무리겠죠. 2. 서버에서 무단 자료 탈취 방지 -> EFS 로 암호화 하는건 안되나요? https://ko.wikipedia.org/wiki/%EC%95%94%ED%98%B8%ED%99%94_%ED%8C%8C%EC%9D%BC_%EC%8B%9C%EC%8A%A4%ED%85%9C

달빛에취하다 / 2018-03-06 16:53

https://mizitechinfo.wordpress.com/2014/07/29/step-by-step-encrypting-user-data-with-efs-in-windows-server-2012-r2/ EFS.. 이게 FTP over 로 작동되는지는 테스트 해봐야 할텐데. 기본적으로 권한을 가지고 있으면 외부(네트워크 드라이브 포함)로 보낼때 자동 복호화가 진행됩니다. Web단은 안될것 같긴하네요..a 한번더 후처리 해야 할것 같긴합니다.

bluewall99 / 2018-03-16 05:15

일반 실시간 암호화 복호화 개발해본 경험으로 말씀드리는데 열시미 하면 1달만에 개발자체는 가능하겠지만 테스팅 기간이 꽤 필요합니다. AES256같은 블록 암호화를 개발할려면 더 어렵구요. 미니필터 드라이버 샘플을 기본으로 시작하셔야 합니다. 자체 커널 코드사인 인증서가 필요합니다. 그건 돈주고 사면 금방가능합니다. 그냥 이미 완성된 필터 드라이버 구입을 추천하고 싶네요. 1~2천만원이면 사는거 같던데.. 그런데 FTP 서버용으로 만드는 거라면 어플리케이션에서 파일 모니터링 이벤트를 이용해서 반 실시간 암호화정도는 할수 있을거 같네요. 필터드라이버로 개발하면 암호화 속도도 빠르고 좋긴하겠지만 확실히 어렵습니다. 파일 시스템 필터 드라이버 중에서도 가장 난이도가 높은 쪽에서 속하니까요. 그리고 정보가 없습니다. 워낙 치사하고 폐쇄적인 개발 파트라 잘 안가르쳐줍니다.

두더딩 / 2018-04-09 03:05

늦었지만 내용을 보면 개발 완료는 ~ 안됬을것 같네요~ 아마 내년 정도에 끝나지 않을까 하네요~ 당체 CLEINT가 어떤 요구를 했는지 안써 있네요~ 위 분도 이야기 한것 처럼 그냥 필터 하나 구매 하시는게....... https://www.callbacktechnologies.com/cbfsfilter/ 콜백 여기가 좀 유명 하니까~ 이제 품 사세요~