전체 글 42

취약한 암호화 구현

취약한 암호화 구현 중요한 데이터가 취약한 암호화 방식으로 저장되어 제3자가 암호화된 데이터를 문제없이 해독 가능한 취약점 소스코드에서 초기화 벡터값 추출 소스코드에서 대칭키 추출 string 32자리 x 8bit = 256 bit 암호화 모드 확인 : EBC / CBC / CFB / OFB 암호화 비트 확인 : 128 / 256 코드에 인코딩이 되어있는 경우 인코딩 방식 확인 암호화/복호화 툴 제작 또는 사이트에서 대칭키로 암호화된 데이터 복호화  Base64 Encode & Decode : https://www.base64decode.org/  AES Tool(전문가) : http://aes.online-domain-tools.com/  AES Tool : http://aesencrryption..

하드코드 된 중요 정보

하드코드 된 중요 정보 어떤 데이터가 코드내에 그대로 입력된 것을 하드 코딩되었다고 한다. 중요 정보가 소스코드에 그대로 노출되어 있다면 소스코드 노출 시 중요 정보가 그대로 제 3자에게 노출될 가능성이 있다. 개발 시 개발자가 편의를 위하여 입력 받아야 할 정보를 소스코드 내에 바로 입력함으로써 실행 시 UI상에서 입력하지 않고 바로 실행하도록 하는 것도 하드 코딩된 취약점 중하나이다. 인시큐어뱅크 앱에서는 총 3곳에서 하드코딩 된 취약점을 발견할 수 있다. 진단방법 코드 분석 시 암호화 클래스 부분을 상세 분석하도록 한다. 중요 정보 문자열 검색을 통해 검토 및 조치한다. 하드 코딩된 키 하드 코딩된 특정 사용자의 비밀번호 대응방법 중요정보가 하드코딩 되지 않도록 코드를 지우거나 중요정보가 동적으로 ..

취약한 액티비티 컴포넌트

액티비티 : 눈에 보이며 사용자와 상호작용하는 곳 취약한 액티비티 컴포넌트 정상적 과정 : 로그인 화면 -> 메인 메뉴 -> 음악 듣기 비정상적 접근 : 로그인 없이 바로 음악듣기 진단방법 AndroidManifest.xml에 있는 컴포넌트 점검 Activity 컴포넌트가 구현된 해당 클래스의 onCreate() 메소드부터 전체 코드 점검 adb shell -> am start -n com.android.insecurebankv2/.ChangePassword adb로는 권한이 없어도 무조건 실행되기 때문에 권한 검사를 할 수 없다. Droze로 진단. run app.package.attacksurface com.android.insecurebankv2 run app.activity.info -a com...

사용자 계정 목록화

사용자 계정 목록화 인시큐어뱅크에서는 접속한 사용자의 아이디값이 노출되는 문제점이 존재한다. 이러한 아이디 노출 시 패스워드 무작위 대입 공격이나 사회적인 공격이 가능하므로 제3자에게 사용자들의 아이디값을 노출시키는 것은 상당히 위험하다. 대응방안 중요정보로 사용되는 정보들은 반드시 암호화해서 저장하고 외부에 노출되지 않도록 내부 저장소에 저장하도록 조치한다. 기기 내의 패키지 폴더 안에 저장된 db파일로부터 로그인 기록 확인 가능 username 암호화 작업 필요 암호화되어 저장됨 확인

취약한 인증 메커니즘

취약한 인증 메커니즘 어플리케이션 사용시 약한 인증 관리로 침해돼선 안될 부분이 침해되어 사용자에게 피해를 입히는 취약점 Insecurebankv2 앱의 Transfer 기능은 약한 사용자 인증으로 인해 From 값을 변조하여 다른 사람의 계좌에서 돈을 보낼 수 있는 취약점이 존재 진단방법 SQLiteBrowser를 활용하여 서버의 DB 점검 Transfer 기능을 담당하는 컴포넌트의 소스코드 점검 Insecurebankv2의 서버인 app.py의 소스코드 점검 SQLiteBrowser를 활용하여 서버의 DB 점검 서버의 db파일 돈을 송금하는 계좌를 별도의 인증없이 다른 유저의 계좌로 바꿀 수 있음 Transfer 기능을 담당하는 컴포넌트의 소스코드 점검 전송 버튼 안드로이드 클라이언트 측에서는 그냥 ..

취약한 SD카드 스토리지

취약한 SD카드 스토리지 안드로이드는 내부 저장소와 외부 저장소로 나뉘는데 SD카드는 외부저장소로 모든 어플리케이션이 접근할 수 있는 영역이다. 이러한 SD카드에 중요 정보가 다른 어플리케이션에 의해 노출될 수 있다. 진단방법 AndroidManifest.xml 파일의 권한 중 WRITE_EXTERNAL_STORAGE 권한이 있는지 확인한다. 코드 분석을 통해 getExternalStroageDirectory() 메소드가 사용되는지 확인하고 사용된다면 어떤 정보들이 저장되는지 확인한다. 단말기를 통해 실제 어떤 정보들이 저장되어 있는지 SD카드에서 확인한다. MODE_WORLD_READABLE 또는 MODE_WORLD_WRITEABLE 모드가 사용 중인지 확인한다. 대응방안 중요 정보 저장 시 외부 저장..

로컬 암호화 이슈

로컬 암호화 이슈 중요 정보가 단말기에 저장될 때 암호화되어 있지 않는 취약점 암호화하지 않고 평문으로 저장 시 여러가지 문제가 생길 우려가 있음 진단방법 앱의 전반적인 기능들을 실행해보고 탐색  모든 기능들을 테스트해보다 보면 저장되는 정보들이 많이 쌓여짐 DB 추출 후 중요정보 암호화 확인 DB 외의 파일들에서 중요정보 암호화 확인 클라이언트단 소스코드 점검 및 암호화 로직 점검 adb pull /data/data/com.android.insecurebankv2 .  adb shell -> cd /data/data  암호화 = 키 필요 인코딩 = 키 필요 x username은 암호화 안됨 확인 password는 암호화 됨 username은 bases64 인코딩 password는 CryptoCla..

안드로이드 백업 취약점

안드로이드 백업 취약점 AndroidManifest.xml 파일의 android:allowBackup 속성이 “true” 설정 시 단말기 백업 시 중요 정보 및 인증 정보를 노출하게 된다. 사용자가 단말기를 잃어버린경우 제3자에 의해 이러한 백업 취약점을 이용해 단말기를 사용하던 사용자의 중요 및 민감정보가 제3자에게 노출될 수 있는 취약점이다. 진단 방법 앱 내의 정보 adb backup -f  adb backup -f insecurebank.ad com.android.insecurebankv2 안드로이드 단말기에서 비밀번호 입력없이 백업 java -jar abe-all.jar unpack  ad 파일을 읽을 수 있는 tar 파일로 변환  java -jar abe-all.jar unpack ins..

취약한 브로드캐스트 리시버

안드로이드 시스템이 인텐트라는 메시지로 정보 전달 취약한 브로드캐스트 리시버 : 다른 앱이 인텐트를 사용하여 비밀번호 변경기능 접근 (접근제어X) Adb로 진단방법 - AndroidManifest.xml에 있는 컴포넌트 점검 - Receiver 컴포넌트가 구현된 해당 클래스의 onReceiver() 메소드 기능 점검 - adb shell –> am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver n 인자없이 메시지 전달 n theBroadcast : 메시지 n com.android.insecurebankv2/.MyBroadCastReceiver : 어떤 패키지의 어떤 컴포넌트 지정 - am broadcast -a t..

DFS/BFS

탐색 - 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 - DFS/BFS 자료구조 - 데이터를 표현하고 관리하고 처리하기 위한 구조 - 스택 : FILO , 파이썬 리스트 그대로 사용 - 큐 : FIFO , collections 모듈에서 제공하는 deque 자료구조(데이터를 넣고 빼는 속도가 리스트 자료형에 비해 효율적), deque.popleft() - 오버플로 : 삽입 시 저장 공간을 벗어나 데이터가 넘침 - 언더플로 : 데이터가 없는 상태에서 삭제 연산 시 그래프 - 노드(node), 간선(edge), 정점(vertex) - 표현방식 - 노드 0에서 노드1까지 거리 7, 노드2까지 거리5 - 인접 행렬 : 2차원 배열로 그래프의 연결 관계를 표현하는 방식 [[0,7,5], [7,0,INF], ..