คำถามติดแท็ก security

ความปลอดภัยไม่ใช่ผลิตภัณฑ์ แต่เป็นกระบวนการ

30
ผู้ตรวจสอบความปลอดภัยของเราเป็นคนงี่เง่า ฉันจะให้ข้อมูลที่ต้องการได้อย่างไร
ผู้ตรวจสอบความปลอดภัยสำหรับเซิร์ฟเวอร์ของเราได้เรียกร้องสิ่งต่อไปนี้ภายในสองสัปดาห์: รายการชื่อผู้ใช้ปัจจุบันและรหัสผ่านข้อความล้วนสำหรับบัญชีผู้ใช้ทั้งหมดบนเซิร์ฟเวอร์ทั้งหมด รายการการเปลี่ยนแปลงรหัสผ่านทั้งหมดสำหรับหกเดือนที่ผ่านมาอีกครั้งในข้อความธรรมดา รายการ "ทุกไฟล์ที่เพิ่มไปยังเซิร์ฟเวอร์จากอุปกรณ์ระยะไกล" ในช่วงหกเดือนที่ผ่านมา พับลิกและไพรเวตคีย์ของคีย์ SSH ใด ๆ อีเมลที่ส่งถึงเขาทุกครั้งที่ผู้ใช้เปลี่ยนรหัสผ่านประกอบด้วยรหัสผ่านข้อความล้วน เราใช้กล่อง Red Hat Linux 5/6 และ CentOS 5 พร้อมการตรวจสอบสิทธิ์ LDAP เท่าที่ฉันทราบทุกอย่างในรายการนั้นเป็นไปไม่ได้หรือยากที่จะได้รับอย่างเหลือเชื่อ แต่ถ้าฉันไม่ให้ข้อมูลนี้เราต้องเผชิญกับการสูญเสียการเข้าถึงแพลตฟอร์มการชำระเงินของเราและสูญเสียรายได้ในช่วงระยะเวลาการเปลี่ยนแปลง บริการใหม่ คำแนะนำใด ๆ สำหรับฉันจะแก้ไขหรือปลอมข้อมูลนี้ได้อย่างไร วิธีเดียวที่ฉันคิดว่าจะได้รับรหัสผ่านแบบข้อความล้วนคือให้ทุกคนรีเซ็ตรหัสผ่านและจดบันทึกสิ่งที่พวกเขาตั้งไว้ ไม่ได้แก้ปัญหาการเปลี่ยนแปลงรหัสผ่านหกเดือนที่ผ่านมาเพราะฉันไม่สามารถบันทึกสิ่งต่าง ๆ ย้อนหลังแบบเดียวกันได้เช่นเดียวกันสำหรับการบันทึกไฟล์ระยะไกลทั้งหมด การรับคีย์ SSH สาธารณะและส่วนตัวทั้งหมดเป็นไปได้ (แม้ว่าจะน่ารำคาญ) เนื่องจากเรามีผู้ใช้และคอมพิวเตอร์เพียงไม่กี่คน หากฉันไม่ได้ทำวิธีนี้ง่ายกว่านี้อีก ฉันอธิบายให้เขาหลายครั้งว่าสิ่งที่เขาขอนั้นเป็นไปไม่ได้ เพื่อตอบข้อกังวลของฉันเขาตอบกลับด้วยอีเมลต่อไปนี้: ฉันมีประสบการณ์มากกว่า 10 ปีในการตรวจสอบความปลอดภัยและเข้าใจวิธีการรักษาความปลอดภัย redhat ดังนั้นฉันขอแนะนำให้คุณตรวจสอบข้อเท็จจริงของคุณเกี่ยวกับสิ่งที่เป็นและเป็นไปไม่ได้ คุณบอกว่าไม่มี บริษัท ใดอาจมีข้อมูลนี้ แต่ฉันได้ทำการตรวจสอบหลายร้อยครั้งซึ่งข้อมูลนี้พร้อมใช้งานแล้ว ลูกค้า [ผู้ให้บริการประมวลผลบัตรเครดิตทั่วไป] …
2307 security  pci-dss 

13
ฉันจะจัดการกับเซิร์ฟเวอร์ที่ถูกบุกรุกได้อย่างไร
นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับความปลอดภัยของเซิร์ฟเวอร์ - การตอบสนองต่อการละเมิดเหตุการณ์ (แฮ็ค) ดูเพิ่มเติมที่: เคล็ดลับสำหรับการรักษาความปลอดภัยเซิร์ฟเวอร์ LAMP ติดตั้งใหม่หลังจากการประนีประนอมราก? Canonical Version ฉันสงสัยว่าเซิร์ฟเวอร์ของฉันอย่างน้อยหนึ่งตัวถูกโจมตีโดยแฮกเกอร์ไวรัสหรือกลไกอื่น ๆ : ขั้นตอนแรกของฉันคืออะไร เมื่อฉันมาถึงที่ไซต์ฉันควรยกเลิกการเชื่อมต่อเซิร์ฟเวอร์รักษา "หลักฐาน" มีการพิจารณาเบื้องต้นอื่น ๆ อีกหรือไม่ ฉันจะให้บริการออนไลน์ได้อย่างไร ฉันจะป้องกันไม่ให้สิ่งเดียวกันเกิดขึ้นอีกครั้งในทันทีได้อย่างไร มีวิธีปฏิบัติที่ดีที่สุดหรือวิธีการเรียนรู้จากเหตุการณ์นี้หรือไม่? หากฉันต้องการจัดทำแผนรับมือเหตุการณ์ไว้ด้วยกันฉันจะเริ่มที่ไหนดี นี่ควรเป็นส่วนหนึ่งของการกู้คืนความเสียหายหรือการวางแผนความต่อเนื่องทางธุรกิจของฉันหรือไม่ รุ่นเดิม 2011.01.02 - ฉันกำลังเข้าสู่การทำงานเวลา 21.30 น. ในวันอาทิตย์เพราะเซิร์ฟเวอร์ของเราถูกบุกรุกอย่างใดและส่งผลให้เกิดการ จู่โจมดอสบนผู้ให้บริการของเรา เซิร์ฟเวอร์ที่เข้าถึงอินเทอร์เน็ตถูกปิดลงซึ่งหมายความว่ามีลูกค้าของเรามากกว่า 5-600 รายในขณะนี้ ตอนนี้อาจเป็นแฮ็ค FTP หรือจุดอ่อนในโค้ดบางแห่ง ฉันไม่แน่ใจจนกว่าฉันจะไปถึงที่นั่น ฉันจะติดตามสิ่งนี้ลงอย่างรวดเร็วได้อย่างไร เราอยู่ในการดำเนินคดีทั้งหมดหากฉันไม่ได้รับเซิร์ฟเวอร์สำรองโดยเร็ว ความช่วยเหลือใด ๆ ที่ชื่นชม เรากำลังเรียกใช้ Open SUSE 11.0 2011.01.03 - …
601 hacking  security 

6
ไฟล์ / โฟลเดอร์เว็บไซต์ของฉันควรได้รับการอนุญาตบนเว็บเซิร์ฟเวอร์ Linux?
นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับการอนุญาตไฟล์ในเว็บเซิร์ฟเวอร์ Linux ฉันมีเว็บเซิร์ฟเวอร์ Linux ที่ใช้ Apache2 ซึ่งโฮสต์เว็บไซต์หลายแห่ง แต่ละเว็บไซต์มีโฟลเดอร์ของตัวเองใน / var / www / /var/www/contoso.com/ /var/www/contoso.net/ /var/www/fabrikam.com/ ไดเรกทอรีฐาน / var / www / เป็นของ root: root Apache ทำงานเป็น www-data: www-data เว็บไซต์ Fabrikam ดูแลโดยสองนักพัฒนาคืออลิซและบ๊อบ ทั้งเว็บไซต์ Contoso ได้รับการดูแลโดยนักพัฒนาซอฟต์แวร์หนึ่งคน เว็บไซต์ทั้งหมดอนุญาตให้ผู้ใช้อัปโหลดภาพ หากเว็บไซต์ถูกบุกรุกผลกระทบควรมี จำกัด มากที่สุด ฉันต้องการทราบวิธีที่ดีที่สุดในการตั้งค่าการอนุญาตเพื่อให้ Apache สามารถให้บริการเนื้อหาเว็บไซต์นั้นปลอดภัยจากการโจมตีและนักพัฒนายังคงสามารถเปลี่ยนแปลงได้ หนึ่งในเว็บไซต์มีโครงสร้างดังนี้: /var/www/fabrikam.com /cache /modules /styles /uploads /index.php ควรตั้งค่าการอนุญาตในไดเรกทอรีและไฟล์เหล่านี้อย่างไร? …

9
Heartbleed: มันคืออะไรและมีตัวเลือกอะไรบ้างในการลดความมัน?
นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับการทำความเข้าใจและแก้ไขปัญหาความปลอดภัย Heartbleed CVE-2014-0160 AKA คืออะไร "Heartbleed" สาเหตุอะไรที่ระบบปฏิบัติการและเวอร์ชั่นของ OpenSSL มีความเสี่ยงมีอาการอะไรบ้างมีวิธีการตรวจสอบหาช่องโหว่ที่ประสบความสำเร็จหรือไม่ ฉันจะตรวจสอบว่าระบบของฉันได้รับผลกระทบได้อย่างไร? ช่องโหว่นี้จะบรรเทาลงได้อย่างไร? ฉันควรกังวลว่ากุญแจหรือข้อมูลส่วนตัวอื่น ๆ ของฉันถูกบุกรุกหรือไม่? ฉันควรคำนึงถึงผลข้างเคียงอะไรบ้าง

22
เป็นเรื่องปกติหรือไม่ที่จะได้รับการทำลายหลายร้อยครั้งต่อวัน?
ฉันเพิ่งตรวจสอบเซิร์ฟเวอร์ของฉัน/var/log/auth.logและพบว่าฉันได้รับการแจ้งเตือนรหัสผ่านล้มเหลว / การทำลายมากกว่า 500 ครั้งต่อวัน! เว็บไซต์ของฉันมีขนาดเล็กและ URL ของมันไม่ชัดเจน เป็นเรื่องปกติหรือไม่ ฉันควรจะใช้มาตรการใด ๆ ?
196 linux  security  ssh  firewall 

5
ฉันอยู่ภายใต้ DDoS ฉันควรทำอย่างไร
นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับ DoS และ DDoS ฉันพบว่ามีทราฟฟิกจำนวนมากบนเว็บไซต์ที่ฉันโฮสต์ในวันนี้ ฉันได้รับการเชื่อมต่อหลายพันครั้งต่อวินาทีและฉันเห็นว่าฉันใช้แบนด์วิดท์ที่มีอยู่ทั้งหมด 100Mbps ไม่มีใครสามารถเข้าถึงเว็บไซต์ของฉันเพราะคำขอทั้งหมดหมดเวลาและฉันไม่สามารถเข้าสู่เซิร์ฟเวอร์ได้เพราะ SSH หมดเวลาเช่นกัน! เรื่องนี้เกิดขึ้นสองสามครั้งก่อนหน้าและแต่ละครั้งมันใช้เวลาสองสามชั่วโมงและหายไปเอง บางครั้งเว็บไซต์ของฉันมีปัญหาที่แตกต่าง แต่มีความเกี่ยวข้อง: โหลดเฉลี่ยของเซิร์ฟเวอร์ของฉัน (ซึ่งมักจะอยู่ที่ประมาณ. 25) พุ่งสูงถึง 20 หรือมากกว่าและไม่มีใครสามารถเข้าถึงเว็บไซต์ของฉันได้เหมือนกับกรณีอื่น ๆ มันจะหายไปหลังจากนั้นไม่กี่ชั่วโมง การรีสตาร์ทเซิร์ฟเวอร์ของฉันไม่ได้ช่วย ฉันจะทำอย่างไรเพื่อให้เว็บไซต์ของฉันสามารถเข้าถึงได้อีกครั้งและเกิดอะไรขึ้น ที่เกี่ยวข้องฉันพบครั้งหนึ่งหรือสองวันทุกครั้งที่ฉันเริ่มให้บริการมันได้รับการเชื่อมต่อจากที่อยู่ IP เฉพาะจากนั้นจึงล้มเหลว ทันทีที่ฉันเริ่มมันอีกครั้งสิ่งนี้ก็เกิดขึ้นอีกครั้งและมันก็ล้มเหลวอีกครั้ง มันคล้ายกันอย่างไรและฉันจะทำอย่างไรกับมัน?
179 security  ddos 

3
เป็นไปได้ที่จะเปลี่ยนที่อยู่อีเมลใน keypair?
ฉันได้สร้างคีย์แพร์ RSA ที่ฉันใช้กับ SSH และมันมีที่อยู่อีเมลของฉันด้วย (ในตอนท้ายของคีย์สาธารณะ) ตอนนี้ฉันเปลี่ยนที่อยู่อีเมลของฉันแล้ว เป็นไปได้หรือไม่ที่จะเปลี่ยนที่อยู่อีเมลในรหัสหรือเป็นส่วนหนึ่งของรหัสและฉันจะต้องสร้างใหม่
133 security  rsa 

7
CTRL-ALT-DEL จะลงชื่อเข้าใช้อย่างไรเพื่อให้ Windows ปลอดภัยยิ่งขึ้น
เมื่อลงชื่อเข้าใช้ Windows จะมีข้อความระบุว่าในหน้านั้นCTRL-ALT-DELทำให้ Windows ปลอดภัยยิ่งขึ้น ฉันไม่เคยสามารถคิดกลไกที่ต้องกดคีย์บางคีย์ก่อนที่จะเข้าสู่ระบบทำให้ระบบมีความปลอดภัยมากขึ้น ฉันไม่เคยพบ VMS, UNIX หรือระบบที่เกี่ยวข้องที่ทำให้คุณกดปุ่มใด ๆ เพื่อเข้าสู่ระบบ - ยกเว้น UNIX ที่อิงกับเทอร์มินัลรุ่นเก่าที่คุณกดENTERเพื่อรับพรอมต์การเข้าสู่ระบบ การกดCTRL-ALT-DELก่อนเข้าสู่ระบบจะทำให้ Windows ปลอดภัยยิ่งขึ้นได้อย่างไร
120 windows  security 

5
วิธีจัดการกับการอัพเดทความปลอดภัยภายในคอนเทนเนอร์ Docker
เมื่อปรับใช้แอปพลิเคชันไปยังเซิร์ฟเวอร์โดยทั่วไปจะมีการแยกระหว่างสิ่งที่แอปพลิเคชันรวมกับตัวเองและสิ่งที่คาดหวังจากแพลตฟอร์ม (ระบบปฏิบัติการและแพ็คเกจที่ติดตั้ง) ประเด็นหนึ่งคือการที่แพลตฟอร์มสามารถอัปเดตได้โดยอิสระจากแอปพลิเคชัน สิ่งนี้มีประโยชน์เช่นเมื่อจำเป็นต้องใช้การอัปเดตความปลอดภัยอย่างเร่งด่วนกับแพ็คเกจที่จัดทำโดยแพลตฟอร์มโดยไม่ต้องสร้างแอปพลิเคชันใหม่ทั้งหมด การอัปเดตความปลอดภัยแบบดั้งเดิมนั้นถูกนำไปใช้โดยเพียงแค่ดำเนินการคำสั่ง package manager เพื่อติดตั้งแพ็กเกจเวอร์ชันที่อัพเดตบนระบบปฏิบัติการ (เช่น "yum update" บน RHEL) แต่ด้วยการถือกำเนิดของเทคโนโลยี container เช่น Docker ที่รูปของ container รวมทั้งแอพพลิเคชั่นและแพลตฟอร์มเป็นวิธีที่ยอมรับได้ในการรักษาระบบด้วย container เป็นอะไร? ทั้งโฮสต์และคอนเทนเนอร์มีชุดแพ็กเกจของตนเองที่เป็นอิสระที่จำเป็นต้องอัพเดตและอัพเดตบนโฮสต์จะไม่อัพเดตแพ็กเกจใด ๆ ภายในคอนเทนเนอร์ ด้วยการเปิดตัว RHEL 7 ที่มีคุณสมบัติพิเศษของ Docker container มันน่าสนใจที่จะได้ยินว่า Redhat แนะนำวิธีใดในการจัดการกับการอัปเดตความปลอดภัยของคอนเทนเนอร์ ความคิดเกี่ยวกับตัวเลือกบางอย่าง: การปล่อยให้แพ็กเกจอัพเดตตัวจัดการแพ็กเกจบนโฮสต์จะไม่อัพเดตแพ็กเกจภายในคอนเทนเนอร์ ต้องสร้างภาพคอนเทนเนอร์ทั้งหมดเพื่อใช้การอัปเดตดูเหมือนว่าจะแยกความแตกต่างระหว่างแอปพลิเคชันและแพลตฟอร์ม (การอัปเดตแพลตฟอร์มต้องเข้าถึงกระบวนการสร้างแอปพลิเคชันซึ่งสร้างอิมเมจ Docker) การรันคำสั่งแบบแมนนวลภายในแต่ละคอนเทนเนอร์ที่รันอยู่นั้นดูเหมือนว่ายุ่งยากและการเปลี่ยนแปลงมีความเสี่ยงที่จะถูกเขียนทับในครั้งต่อไปที่คอนเทนเนอร์ถูกอัพเดตจากแอ็พพลิเคชันการปล่อยสิ่งประดิษฐ์ ดังนั้นวิธีการเหล่านี้จึงไม่น่าพอใจ

6
ฉันจะใช้ ansible ด้วยรหัสผ่านสำหรับโฮสต์ได้อย่างปลอดภัยได้อย่างไร
ฉันต้องการใช้ansibleเพื่อจัดการกลุ่มของเซิร์ฟเวอร์ที่มีอยู่ ฉันสร้างansible_hostsไฟล์และทดสอบสำเร็จแล้ว (พร้อม-Kตัวเลือก) ด้วยคำสั่งที่กำหนดเป้าหมายไปยังโฮสต์เดียวเท่านั้น ansible -i ansible_hosts host1 --sudo -K # + commands ... ปัญหาของฉันตอนนี้คือรหัสผ่านผู้ใช้ในแต่ละโฮสต์นั้นแตกต่างกัน แต่ฉันไม่สามารถหาวิธีจัดการกับสิ่งนี้ได้ใน Ansible ใช้-Kฉันได้รับพร้อมท์สำหรับรหัสผ่าน sudo เดียวล่วงหน้าซึ่งดูเหมือนว่าจะพยายามสำหรับโฮสต์ที่ตามมาทั้งหมดโดยไม่ต้องแจ้ง: host1 | ... host2 | FAILED => Incorrect sudo password host3 | FAILED => Incorrect sudo password host4 | FAILED => Incorrect sudo password host5 | FAILED => Incorrect sudo …
108 security  sudo  ansible 


20
เหตุใดฉันจึงควรใช้เซิร์ฟเวอร์ไฟร์วอลล์
โปรดทราบ:ฉันไม่สนใจที่จะทำให้สิ่งนี้เป็นสงครามที่ลุกเป็นไฟ! ฉันเข้าใจว่าหลายคนมีความเชื่อมั่นอย่างแรงกล้าเกี่ยวกับเรื่องนี้ในส่วนที่ไม่น้อยเพราะพวกเขาใช้ความพยายามอย่างมากในการแก้ปัญหาไฟร์วอลล์ของพวกเขาและเพราะพวกเขาได้รับการปลูกฝังให้เชื่อในความจำเป็นของพวกเขา อย่างไรก็ตามฉันกำลังมองหาคำตอบจากคนที่เป็นผู้เชี่ยวชาญด้านความปลอดภัย ฉันเชื่อว่านี่เป็นคำถามที่สำคัญและคำตอบจะเป็นประโยชน์มากกว่าตัวฉันและ บริษัท ที่ฉันทำงานด้วย ฉันใช้เครือข่ายเซิร์ฟเวอร์ของเรามาหลายปีแล้วโดยไม่มีการประนีประนอมเลย ไม่มีการประนีประนอมการรักษาความปลอดภัยที่เราได้มีจะได้รับการป้องกันด้วยไฟร์วอลล์ ฉันเดาว่าฉันทำงานที่นี่นานเกินไปเพราะเมื่อฉันพูดว่า "เซิร์ฟเวอร์" ฉันมักจะหมายถึง "บริการที่เสนอให้กับสาธารณะ" ไม่ใช่ "ฐานข้อมูลการเรียกเก็บเงินภายในที่เป็นความลับ" เช่นกฎระเบียบใด ๆ ที่เราจะมีในไฟร์วอลล์จะต้องอนุญาตให้เข้าถึงอินเทอร์เน็ตทั้งหมด นอกจากนี้เซิร์ฟเวอร์การเข้าถึงสาธารณะของเราทั้งหมดอยู่ในดาต้าเซ็นเตอร์โดยเฉพาะแยกต่างหากจากสำนักงานของเรา มีคนอื่นถามคำถามที่คล้ายกันและคำตอบของฉันถูกโหวตเป็นตัวเลขติดลบ สิ่งนี้ทำให้ฉันเชื่อว่าคนที่โหวตไม่เข้าใจคำตอบของฉันหรือฉันไม่เข้าใจความปลอดภัยเพียงพอที่จะทำสิ่งที่ฉันกำลังทำอยู่ นี่คือแนวทางของฉันในการรักษาความปลอดภัยเซิร์ฟเวอร์: ปฏิบัติตามแนวทางความปลอดภัย ของระบบปฏิบัติการของฉันก่อนเชื่อมต่อเซิร์ฟเวอร์ของฉันกับอินเทอร์เน็ต ใช้ TCP wrappers เพื่อ จำกัด การเข้าถึง SSH (และบริการการจัดการอื่น ๆ ) กับที่อยู่ IP จำนวนเล็กน้อย ตรวจสอบสถานะของเซิร์ฟเวอร์นี้กับMunin และแก้ไขปัญหาความปลอดภัยอย่างร้ายแรงที่มีอยู่ใน Munin-node ในการกำหนดค่าเริ่มต้น Nmap เซิร์ฟเวอร์ใหม่ของฉัน (ก่อนที่จะเชื่อมต่อเซิร์ฟเวอร์ของฉันกับอินเทอร์เน็ต) ถ้าฉันจะไฟร์วอลล์เซิร์ฟเวอร์นี้ควรจะเป็นชุดที่แน่นอนของพอร์ตการเชื่อมต่อขาเข้าควรถูก จำกัด ติดตั้งเซิร์ฟเวอร์ในห้องเซิร์ฟเวอร์และให้ที่อยู่ IP สาธารณะ รักษาระบบให้ปลอดภัยโดยใช้คุณสมบัติอัปเดตความปลอดภัยของระบบปฏิบัติการของฉัน ปรัชญาของฉัน …
104 security  firewall 


5
“ เป็นไปได้ในการบุกรุก!” ใน / var / log / secure - สิ่งนี้หมายความว่าอย่างไร
ฉันมี CentOS 5.x box ที่ทำงานบนแพลตฟอร์ม VPS โฮสต์ VPS ของฉันตีความคำถามสนับสนุนที่ฉันมีเกี่ยวกับการเชื่อมต่อและล้างกฎ iptables บางอย่างได้อย่างมีประสิทธิภาพ สิ่งนี้ส่งผลให้ฟัง ssh บนพอร์ตมาตรฐานและยอมรับการทดสอบการเชื่อมต่อพอร์ต น่ารำคาญ ข่าวดีก็คือฉันต้องการรหัสที่ได้รับอนุญาตจาก SSH เท่าที่ฉันจะบอกได้ฉันไม่คิดว่าจะมีการฝ่าฝืนที่ประสบความสำเร็จ ฉันยังคงกังวลอย่างมากเกี่ยวกับสิ่งที่ฉันเห็นใน / var / log / secure แม้ว่า: Apr 10 06:39:27 echo sshd[22297]: reverse mapping checking getaddrinfo for 222-237-78-139.tongkni.co.kr failed - POSSIBLE BREAK-IN ATTEMPT! Apr 10 13:39:27 echo sshd[22298]: Received disconnect from …
96 linux  security  ssh  centos 

6
เคล็ดลับสำหรับการรักษาความปลอดภัยเซิร์ฟเวอร์ LAMP
นี่เป็นคำถามที่ยอมรับได้เกี่ยวกับการรักษาความปลอดภัยของหลอดไฟ LAMP อะไรคือแนวทางที่แน่นอนสำหรับการรักษาความปลอดภัยเซิร์ฟเวอร์ LAMP?
95 linux  security  lamp 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.