It's hard to tell your the best way to go without knowing the specifics of your needs. In general, it is better to create a new table and associate it with the "Listings" table via "listing_id" like you mentioned. This gives you much more flexibility. Remember to index the "listing_id".
Anther way to do it is by including all the checkboxes directly in the "Listings" table. You can add a column for each checkbox. This is the easiest, but least flexible way. If the number of your checkboxes changes over time, you have to keep modifying the table.
Alternatively, you can add one single field for all checkboxes. Each byte of this field represents a checkbox, so the number of bytes should be the same as the number of your checkboxes and with the same order (or you have to specify the order somewhere). This is a little more complex and is also not very flexible because you have to modify this field every time you change the checkboxes. However, the advantage is that you use one field which can be handy if you have many checkboxes. If you prefer more readability, you can use characters (i.e. 1 and 0) instead of bytes.
Example: Let's say you have 5 checkboxes, the "Listings" table will look like:
ID | specs
1 | "10110"
2 | "01100"
3 | "11100"
4 | "00010"
5 | "01010"
So, I'd go with the first solution that you mentioned, but it really depends your needs.