지금까지 본 최악의 보안 취약점은 무엇입니까? 유죄를 보호하기 위해 세부 사항을 제한하는 것이 좋습니다.
무엇의 가치를 들어, 다음의 질문 에는 보안 구멍을 발견 한 경우 수행 할 작업에 대한, 그리고 다른 유용한 답변이 회사는하지 응답 (것) 않는 경우.
지금까지 본 최악의 보안 취약점은 무엇입니까? 유죄를 보호하기 위해 세부 사항을 제한하는 것이 좋습니다.
무엇의 가치를 들어, 다음의 질문 에는 보안 구멍을 발견 한 경우 수행 할 작업에 대한, 그리고 다른 유용한 답변이 회사는하지 응답 (것) 않는 경우.
답변:
온라인 상점 초기부터 :
장바구니의 수량 필드에 0.1을 입력하여 90 % 할인 받기 소프트웨어는 총 비용을 .1 * 비용으로 적절하게 계산했으며 주문을 포장하는 사람은 단순히 "홀수"이상으로 광택을 내었습니다. 포장 수량 :)
가장 용서할 수없는 보안 허점, 불행히도 가장 일반적이고 찾기 쉬운 것은 Google 해킹 입니다. 지목 사항:
http://www.google.com/search?q=inurl%3Aselect+inurl%3A%2520+inurl%3Afrom+inurl%3Awhere
인터넷, 특히 정부 사이트에서 쿼리 문자열을 통해 SQL 쿼리를 전달하는 페이지 수는 놀랍습니다. 최악의 SQL 주입 형식이며 취약한 사이트를 찾는 데 전혀 노력하지 않습니다.
약간의 조정만으로 보호되지 않은 phpMyAdmin 설치, 보호되지 않은 MySQL 설치, 사용자 이름 및 비밀번호가 포함 된 쿼리 문자열 등을 찾을 수있었습니다.
사회 공학 :
<Cthon98> hey, if you type in your pw, it will show as stars
<Cthon98> ********* see!
<AzureDiamond> hunter2
<AzureDiamond> doesnt look like stars to me
<Cthon98> <AzureDiamond> *******
<Cthon98> thats what I see
<AzureDiamond> oh, really?
<Cthon98> Absolutely
<AzureDiamond> you can go hunter2 my hunter2-ing hunter2
<AzureDiamond> haha, does that look funny to you?
<Cthon98> lol, yes. See, when YOU type hunter2, it shows to us as *******
<AzureDiamond> thats neat, I didnt know IRC did that
<Cthon98> yep, no matter how many times you type hunter2, it will show to us as *******
<AzureDiamond> awesome!
<AzureDiamond> wait, how do you know my pw?
<Cthon98> er, I just copy pasted YOUR ******'s and it appears to YOU as hunter2 cause its your pw
<AzureDiamond> oh, ok.
에서 bash.org
Microsoft의 초기 시절의 실화.
ZDNet.com에서 아침이 " Blah "에서 발견 된 최악의 Internet Explorer 보안 취약점이 발견되었습니다 . "Blah"는 6 개월 전에 작성한 코드입니다. .
작업을 시작하자마자 변경 로그를 확인한 후 다른 팀의 직원 (제품 변경을 신뢰할 수있는 사람)이 내 코드를 확인하고 아무런 이유없이 보안 레지스트리 키 설정을 변경했음을 발견했습니다. 다시 체크인했으며 코드 검토를 받거나 다른 사람에게 알리지 않았습니다. 오늘날까지 나는 지상에서 그가 무엇을하고 있다고 생각하는지 전혀 모른다. 그는 곧 회사를 떠났다. (자신의 협정에 따라)
(업데이트 : 의견에서 제기 된 문제에 대한 몇 가지 답변 :
먼저, 보안 키 변경이 의도적이지 않고 악의가 아닌 부주의 또는 친숙 함을 기반으로한다는 자선적인 입장을 취하기로 결정했습니다. 나는 어떤 식 으로든 다른 방법으로 증거가 없으며, 인간의 실수로 실수를 일으키는 것이 현명하다고 믿는다.
둘째, 체크인 시스템은 12 년 전보다 훨씬 강력합니다. 예를 들어, 체크인 시스템이 변경 목록을 이해 당사자에게 이메일로 보내지 않으면 코드를 체크인 할 수 없습니다. 특히, 선박주기 후반에 변경된 사항에는 제품의 안정성과 보안을 보장하기 위해 올바른 변경이 이루어 지도록 많은 "프로세스"가 있습니다.)
어쨌든 버그는 Internet Explorer에서 사용하기에 안전하지 않은 개체가 실수로 "스크립트 사용에 안전"으로 표시되었다는 것입니다. 이 개체는 바이너리 파일 (실제로 OLE 자동화 유형 라이브러리)을 임의의 디스크 위치에 쓸 수있었습니다. 이것은 공격자가 적대적인 코드의 특정 문자열을 포함하는 형식 라이브러리를 제작하고 알려진 실행 가능한 위치 인 경로에 저장하며 스크립트 실행을 유발할 수있는 확장 기능을 제공하며 사용자에게 희망을 줄 수 있음을 의미했습니다. 실수로 코드를 실행합니다. 이 취약점을 사용한 성공적인 "실제"공격에 대해서는 알지 못하지만이 취약점을 악용하여 악용 할 수는 있습니다.
우리는 그 패치를 매우 신속하게 제공했습니다.
나는 JScript에서 더 많은 보안 허점을 일으켜서 고쳤지만 그 어느 것도 그 홍보지 근처에 없었습니다.
여기서 잘못된 점을 발견 할 수 있기를 바랍니다. (사실, 정말로 잘못되었습니다) :
String emailBody = "";
for (int i = 0; i < subscribers.Count; i++)
{
emailBody += "Hello " + subscribers[i].FirstName + ",";
emailBody += "this is a reminder with your account information: \n\n:";
emailBody += "Your username: " + subscribers[i].Username + "\n";
emailBody += "Your password: " + subscribers[i].Password + "\n";
emailBody += "Have a great day!";
emailDispatcher.Send(subscribers[i].EmailAddress, emailBody);
}
마지막 수신자는 가장 행복했습니다.)
내가 본 최악의 보안 취약점은 실제로 귀하의 코드에 의해 코딩되었으며 Google Bot이 전체 데이터베이스를 삭제하게했습니다.
클래식 ASP를 처음 배우던 시절에 저는 기본 블로그 응용 프로그램을 코딩했습니다. 모든 관리 스크립트가있는 디렉토리는 IIS의 NTLM에 의해 보호되었습니다. 어느 날 새 서버로 옮겼으며 IIS에서 디렉토리를 다시 보호하는 것을 잊었습니다 (oops).
블로그 홈 페이지에는 기본 관리자 화면에 대한 링크가 있고 기본 관리자 화면에는 각 레코드에 대한 삭제 링크가 있습니다 (확인 없음).
어느 날 데이터베이스의 모든 레코드가 삭제되었습니다 (수백 개의 개인 항목). 일부 독자가 사이트를 침입하여 모든 레코드를 악의적으로 삭제했다고 생각했습니다.
Google Bot이 사이트를 크롤링하고 관리 링크를 따라 갔으며 모든 삭제 링크를 따라가 데이터베이스의 모든 레코드를 삭제했습니다. Google Bot에 의해 올해 올해의 Dumbass 상을받을 자격이 있다고 생각했습니다.
고맙게도 백업이있었습니다.
내가 본 최악의 구멍은 빈 사용자 이름과 암호를 지정하면 관리자로 로그인 할 수있는 웹 응용 프로그램의 버그였습니다. :)
일단 웹 사이트의 URL에서 이것을 발견했습니다.
http://www.somewebsite.com/mypage.asp?param1=x¶m2=y&admin=0
마지막 매개 변수를 admin = 1로 변경하면 관리자 권한이 부여되었습니다. 당신이 맹목적으로 사용자 입력을 믿으려면 최소한 당신이하고있는 것을 전보하지 마십시오!
나는 이것을 매일 WTF 에서 보았다 .
<script language="javascript">
<!--//
/*This Script allows people to enter by using a form that asks for a
UserID and Password*/
function pasuser(form) {
if (form.id.value=="buyers") {
if (form.pass.value=="gov1996") {
location="http://officers.federalsuppliers.com/agents.html"
} else {
alert("Invalid Password")
}
} else {
alert("Invalid UserID")
}
}
//-->
</script>
이 IMHO를 이길 수있는 것은 없습니다.
대학교에서 이름없는 채로 남아있을 것입니다. 그들은 모든 행동 쿼리가 양식 게시 대신 URL을 통해 전달되었습니다.
구글 봇 (Google Bot)이 와서 모든 URL을 통해 데이터베이스를 정리할 때까지 문제가 해결되었습니다.
아무도 사회 공학을 제기하지 않았지만 이 기사에서 쫓겨났습니다. .
요약 : 악의적 인 사용자는 수십 개의 플래시 드라이브를 구입하여 자동 실행 바이러스 또는 트로이 목마를로드 한 다음 밤 늦게 회사 주차장에 플래시 드라이브를 뿌릴 수 있습니다. 다음날, 모두가 일하러 가고, 반짝이고, 사탕 모양의, 저항 할 수없는 하드웨어를 우연히 발견하고 "오, 와우, 무료 플래시 드라이브, 무슨 일인지 궁금합니다!" -20 분 후 회사의 전체 네트워크에 호스가 연결되었습니다.
Microsoft Bob
(크레딧 : Dan의 20 세기 Abandonware )
암호를 세 번 잘못 입력하면 암호를 잊었는지 묻는 메시지가 나타납니다.
http://img132.yfrog.com/img132/8397/msbob10asignin15.gif
그러나 비밀번호를 입력 할 때까지 올바른 비밀번호를 묻는 메시지를 계속 표시하거나 여러 번의 잘못된 시도 후에 잠금을 해제하는 등 보안을 유지하는 대신 새 비밀번호를 입력하면 원래 비밀번호가 대체됩니다! 누구나 "보호 된"Microsoft Bob 계정 암호로이 작업을 수행 할 수 있습니다.
사전 인증이 필요하지 않습니다. "User1은 암호를 세 번 잘못 입력 한 다음 네 번째로 새 암호를 입력하여 자신의 암호를 변경할 수 있습니다."암호 변경 "을 사용하지 않아도됩니다.
또한 User1이 User2, User3 ...의 암호를 정확히 같은 방식으로 변경할 수 있음을 의미합니다. 모든 사용자는 다른 사용자의 암호를 세 번 잘못 입력 한 다음 메시지가 표시되면 새 암호를 입력하여 계정에 액세스 할 수 있습니다.
나는 Joe X의 전 집 주소를 가졌으며 같은 도시에서 그의 최신 주소를 알아야했지만 연락 할 방법이 없었습니다. 나는 그가 매일 매일 주문하는 우편 주문 카탈로그를 받고 있다고 생각했기 때문에 See 's Candies에 대해 800 번호를 임의로 불렀습니다 (빅토리아의 비밀, 스위스 식민지 또는 다른 큰 우편물과는 반대).
나 : "안녕하세요, 나는 조 엑스입니다. 당신이 저의 이전 주소와 새 주소 모두에서 메일 링리스트에 두 번 도착했다고 생각합니다. 컴퓨터가 [오래된 주소] 또는 [가짜 주소]에 나에게 표시됩니까? ? "
운영자 : "아니요, [새 주소]에 표시됩니다."
주기 = 1 1 텍스트 상자의에서 모든 사용자 목록 시스템의가.
생활을위한 응용 프로그램 보안 컨설턴트이기 때문에 웹 사이트에서 관리자를 통해 무언가를 통해 얻을 수있는 일반적인 문제가 많이 있습니다. 그러나 정말 멋진 부분은 백만 달러 상당의 양말을 살 수있는 시점입니다.
이 공연에서 일하는 것은 내 친구 였지만 지금 가장 인기있는 온라인 서적 (및 기타 모든) 상점의 항목 가격은 HTML 자체에 숨겨진 필드로 저장되어 있다는 것이 가장 큰 장점이었습니다. 초기에는이 버그에 많은 온라인 상점이 있었지만 웹을 찾기 시작했습니다. 보안에 대한 인식이 거의 없습니다. 누가 HTML을 다운로드하고 숨겨진 필드를 편집하고 주문을 다시 제출할 것입니까?
당연히 우리는 가격을 0으로 바꾸고 백만 쌍의 양말을 주문했습니다. 가격을 마이너스로 변경할 수도 있지만 이로 인해 백엔드 청구 소프트웨어 버퍼 오버 플로우로 인해 트랜잭션이 종료됩니다.
다른 것을 선택할 수 있다면 웹 응용 프로그램의 경로 표준화 문제 일 것입니다. foo.com?file=../../../../etc/passwd를 수행 할 수 있다는 것은 멋진 일입니다.
데이터베이스 루트 암호를 실수로 소스 제어에 커밋합니다. Sourceforge의 소스 제어이기 때문에 꽤 나빴습니다.
말할 필요도없이 암호가 매우 빠르게 변경되었습니다.
주요 IT 직원이 회사를 떠날 때 관리자 암호를 변경하지 않습니다.
이것은 내가 본 것 중 최악의 보안 구멍은 아니지만. 그러나 이것은 내가 스스로 발견 한 최악의 상황입니다.
성공적인 오디오 북 온라인 상점은 쿠키를 사용하여 인증 후 현재 사용자의 식별 정보를 저장했습니다. 그러나 쿠키에서 사용자 ID를 쉽게 변경하고 다른 계정에 액세스하여 구입할 수 있습니다.
.com 시대가 시작 되 자마자 저는 해외 대형 소매점에서 일하고있었습니다. 우리는 경쟁 업체가 몇 달 전에 온라인 상점을 시작함에 따라 큰 관심을 보았습니다. 물론, 우리는 시도해 보았습니다 ... 그리고 우리의 쇼핑 카트가 섞여 있음을 빨리 깨달았습니다. 쿼리 문자열을 약간 사용한 후 서로의 세션을 가로 챌 수 있음을 깨달았습니다. 타이밍이 좋으면 배송지 주소를 변경할 수 있지만 결제 방법을 그대로 둘 수 있습니다. 장바구니에 원하는 항목을 채운 후에는 모든 방법을 사용할 수 있습니다.
내가 현재 근무중인 회사에 처음 입사했을 때 상사는 새로운 고객의 기존 전자 상거래 웹 사이트를 살펴 보았습니다. 이것은 IIS와 전자 상거래 모두 초기 단계였으며 보안은 엄격하지 않았습니다.
간단히 말해서, 그는 호기심으로 URL을 변경하고 디렉토리 탐색이 해제되지 않았다는 것을 깨달았습니다. 따라서 URL 끝에서 페이지 이름을 잘라내어 파일의 모든 파일을 볼 수 있습니다. 웹 서버.
우리는 다운로드 한 Access 데이터베이스가 들어있는 폴더를 찾아 보았습니다. 수천 개의 암호화되지 않은 신용 카드 번호로 가득 찬 전체 전자 상거래 고객 / 주문 데이터베이스였습니다.
13 살 때 학교는 학생들을위한 소셜 네트워크를 열었습니다. 불행히도 나는 URI를 "? userID = 123"과 같은 다른 userID로 변경하고 해당 사용자에 로그인 할 수있는 보안 버그를 발견했습니다. 분명히 나는 친구들에게 말했고, 결국 학교 소셜 네트워크에는 포르노가 가득했습니다.
그래도 권장하지 않습니다.
수퍼 유저 액세스를위한 빈 사용자 이름 / 암호 필드가 훨씬 최악이라고 생각합니다. 하지만 내가 본 것은
if (password.equals(requestpassword) || username.equals(requestusername))
{
login = true;
}
한 명의 운영자가 너무 나쁜 것은 그러한 큰 차이를 만듭니다.
내 고객 인 은행을위한 것입니다. 로그온 할 수 없어 고객 서비스 센터에 연락했습니다. 그들은 사용자 이름과 다른 것을 요구하지 않았습니다. 보안 관련 질문이나 신원 확인을 시도하지 않았습니다. 그런 다음 파일에 저장된 이메일 주소로 비밀번호 재설정을 전송하는 대신 전송할 이메일 주소를 묻습니다. 파일에있는 것과 다른 주소를 제공하여 비밀번호를 재설정 할 수있었습니다.
기본적으로 해커에게 필요한 것은 내 사용자 이름이며 내 계정에 액세스 할 수 있습니다. 이것은 미국의 사람들 중 적어도 90 %가 들어 본 주요 은행을위한 것이 었습니다. 이것은 약 2 년 전에 일어났습니다. 제대로 훈련되지 않은 고객 서비스 담당자인지 아니면 표준 절차인지 모르겠습니다.
내가 만든 것을 공유하겠습니다. 거의.
몇 년 전, 제가 일하고 있던 회사는 ASP 웹 사이트에서 인덱싱을 원했습니다. 그래서 인덱스 서버를 설정하고 몇 개의 관리 디렉토리를 제외하고 모두 좋았습니다.
그러나 누군가는 영업 사원에게 웹 서버에 대한 ftp 액세스 권한을 부여하여 집에서 일할 수있게 해주었습니다. 전화를 거는 날이었고 파일을 교환하는 가장 쉬운 방법이었습니다. ... 서비스에 대한 마크 업을 자세히 설명하는 문서를 포함합니다. 인덱스 서버는 사람들이 "비용"을 검색 할 때 색인을 생성하고 서비스를 시작합니다.
블랙리스트가 아닌 화이트리스트를 기억하십시오.
가장 단순하면서도 비용이 많이 드는 가치 중 하나는 다음과 같습니다.
PayPal 과 같은 엔진을 사용하는 결제 시스템 지불이 성공한 후 PayPal의 응답이 제대로 확인되지 않아 결함이있을 수 있습니다.
예를 들면 다음과 같습니다.
CD 구매 웹 사이트로 이동하여 장바구니에 내용을 추가 한 다음 결제 단계에서 일반적으로 페이지에 페이팔 필드가 채워진 양식과 "지불"에 대한 제출 버튼이 있습니다.
DOM 편집기를 사용하여 "live"형식으로 이동하여 값을 £899.00
에서£0.01
한 다음 제출 ...을 클릭하십시오.
내가 PayPal 측에있을 때 금액이 1 페니임을 알 수 있으므로 PayPal은 일부 매개 변수를 초기 구매 사이트로 리디렉션합니다. payment_status=1
하지만 그렇지 않습니다. 지불 금액을 확인하십시오.
충분한 로깅이 없거나 제품이 자동으로 발송되면 비용이 많이들 수 있습니다.
최악의 사이트는 응용 프로그램, 소프트웨어, 음악 등을 제공하는 사이트입니다.
기억할 수있는 모든 보안 권한을 설정할 수있는 온라인 문서 관리자는 어떻습니까?
다운로드 페이지에 도달 할 때까지는 ... download.aspx? documentId = 12345
예, documentId는 데이터베이스 ID (자동 증가)이며 모든 단일 번호를 반복 할 수 있으며 모든 회사 문서를 얻을 수 있습니다.
이 문제에 대해 경고를 받으면 프로젝트 관리자의 응답은 다음과 같습니다. 감사합니다. 그러나 아무도 이것을 이전에 눈치 채지 못 했으므로 그대로 유지합시다.
노르웨이 피자 배달에는 새롭고 반짝이는 인터넷 포털에서 부정적인 양의 피자를 주문 하여 무료로 구할 수있는 보안 구멍이있었습니다 .